C语言程序 指针
2015-07-28 22:31
621 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
指针概念
根据内存单元的编号或地址找到所需的内存单元,通常把这个地址叫做指针,内存地址也叫指针。
指针是C语言中最重要的内容之一:“无指针,不自由”。
使用指针的好处:为函数提供修改调用变量的灵活手段,让函数有多个返回值,使用指针传递地址,既提高了传输速度,又节省了大量的内存。
在C语言中,允许用一个变量来存放指针,这种变量称为“指针变量”。故指针变量的值是某个内存单元的地址。
指针使用格式: 类型说明符 *变量名;
其中*表示这是一个指针变量,变量的值只能存放地址。
指针变量的初始化:
1)定义的同时进行初始化
int a = 5;
int *p =&a;
2)先定义后初始化
int a;
int *p;
p=&a;
指针变量不能被赋值一个整数值(因为不知道这个整数的内存地址),被赋值的指针前不能加“*”说明符。
注意点:多个指针可以指向同一个变量,指针的指向是可以改变的,指针没有初始化里面是一个垃圾数,也称为野指针。
野指针可能会导致程序崩溃或访问不该访问的东西。
指针原理:有若干个1个字节的内存单元组成,每个内存单元都有唯一的一个地址。
二级指针:如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针即二级指针。
指针为什么区分类型?
虽然所有的指针都占8个字节,但不同类型的变量占不同的字节数,如果定义指针变量不定义类型,那在它取其中的值时,不知道应该读取几个字节。
数组指针:实质上是指针,所谓数组指针就是数组元素的地址
如:
逆序数组
#include <stdio.h>
int main(int argc,const char *argv[])
{
int a[]={1,2,3,4,5,6,7,8,9};
int *p=a;
int i=0,j=8,temp;
while(i<j)
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
i++;
j--;
}
for(int i=0;i<9;i++)
{
printf("%d",*(p+i));
}
printf("\n");
return 0;
}指针数组:数组元素为指针的数组
使用格式:类型说明符 *数组名[数组长度]
int a[3]={1,2,3};
int *p[3]={a[0],a[1],a[2]};
指针变量之间的运算:
1)两指针变量的减法运算
两个指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。
实际上是两个指针变量相减之差再除以该数组元素的长度:
int *p;
int i;
i==((p+i)-p)/sizeof(int);
两个指针变量的关系运算
指向同一数组的两指针变量进行关系运算可表示他们所指数组元素之间的关系
int *p;
int *p1;
p>p1;
返回值为0或1
0 p==p1 表示p和p1指向同一元素
0 p<p1 表示p指向的元素位于低地址
1 p>p1 表示p指向的元素位于高地址
指针变量还可以与0进行比较,设p为指针变量,则p==0表明p是空指针,它不指向任何变量;p!=0表示p不是空指针。
指针函数
函数的返回值为指针的函数称为指针函数
使用格式:类型说明符 * 函数名(形参表){ 函数体}
函数指针
指向函数的指针变量称为函数指针
使用格式: 类型说明符 (*指针变量名)();
指针概念
根据内存单元的编号或地址找到所需的内存单元,通常把这个地址叫做指针,内存地址也叫指针。
指针是C语言中最重要的内容之一:“无指针,不自由”。
使用指针的好处:为函数提供修改调用变量的灵活手段,让函数有多个返回值,使用指针传递地址,既提高了传输速度,又节省了大量的内存。
在C语言中,允许用一个变量来存放指针,这种变量称为“指针变量”。故指针变量的值是某个内存单元的地址。
指针使用格式: 类型说明符 *变量名;
其中*表示这是一个指针变量,变量的值只能存放地址。
指针变量的初始化:
1)定义的同时进行初始化
int a = 5;
int *p =&a;
2)先定义后初始化
int a;
int *p;
p=&a;
指针变量不能被赋值一个整数值(因为不知道这个整数的内存地址),被赋值的指针前不能加“*”说明符。
注意点:多个指针可以指向同一个变量,指针的指向是可以改变的,指针没有初始化里面是一个垃圾数,也称为野指针。
野指针可能会导致程序崩溃或访问不该访问的东西。
指针原理:有若干个1个字节的内存单元组成,每个内存单元都有唯一的一个地址。
二级指针:如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针即二级指针。
指针为什么区分类型?
虽然所有的指针都占8个字节,但不同类型的变量占不同的字节数,如果定义指针变量不定义类型,那在它取其中的值时,不知道应该读取几个字节。
数组指针:实质上是指针,所谓数组指针就是数组元素的地址
如:
逆序数组
#include <stdio.h>
int main(int argc,const char *argv[])
{
int a[]={1,2,3,4,5,6,7,8,9};
int *p=a;
int i=0,j=8,temp;
while(i<j)
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
i++;
j--;
}
for(int i=0;i<9;i++)
{
printf("%d",*(p+i));
}
printf("\n");
return 0;
}指针数组:数组元素为指针的数组
使用格式:类型说明符 *数组名[数组长度]
int a[3]={1,2,3};
int *p[3]={a[0],a[1],a[2]};
指针变量之间的运算:
1)两指针变量的减法运算
两个指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。
实际上是两个指针变量相减之差再除以该数组元素的长度:
int *p;
int i;
i==((p+i)-p)/sizeof(int);
两个指针变量的关系运算
指向同一数组的两指针变量进行关系运算可表示他们所指数组元素之间的关系
int *p;
int *p1;
p>p1;
返回值为0或1
0 p==p1 表示p和p1指向同一元素
0 p<p1 表示p指向的元素位于低地址
1 p>p1 表示p指向的元素位于高地址
指针变量还可以与0进行比较,设p为指针变量,则p==0表明p是空指针,它不指向任何变量;p!=0表示p不是空指针。
指针函数
函数的返回值为指针的函数称为指针函数
使用格式:类型说明符 * 函数名(形参表){ 函数体}
函数指针
指向函数的指针变量称为函数指针
使用格式: 类型说明符 (*指针变量名)();
相关文章推荐
- C++构造函数的自动调用(调用一个父类的构造函数,有显性调用最好,否则就默认调用无参数的构造函数)——哲学思想:不调用怎么初始化父类的成员数据和VMT?
- C++新特性学习(3)
- C语言中关于位域的介绍
- C++新特性学习(4)
- C++新特性学习(2)
- C语言之函数调用16—递归法之一般函数的调用(1)
- C++对象内存布局(1)
- 猜数字游戏
- c++指针作为函数参数传递的问题
- C语言之函数调用15—递归法求哥德巴赫猜想
- C++ IO类
- C++ outline and interview questions (2): Pointers
- C语言知识总结
- C语言之函数调用14—递归法打印勒让德多项式前N项
- 给source insight添加.cc的C++文件后缀识别
- 使用C语言访问MySQL数据 —— 连接和错误处理
- iOS分分钟搞定C语言 —— 进制
- C语言之函数调用13—递归法求N阶勒让德多项式的值
- C/C++中的static关键字
- C++中指针和引用的区别与联系