指针小结
基本概念与性质
- 指针是数据在内存所占存储空间的首地址。存放指针值的变量称为指针变量,当指针变量的值为某变量的地址时,称这个指针指向该变量。同其他类型的变量一样,指针变量也必须在使用前加以定义。
- 指针变量的内容可以是0、NULL和一个确定的内存地址。其中0和NULL等价,它们表示空指针。除0外,其他任何常量都不允许直接赋值给指针变量。
- C语言中用地址运算符(&)来返回某变量的地址。地址运算符的操作数必须是一个内存变量,不能把地址运算符用于普通常量、表达式或寄存器类型的变量。
- C语言用指针运算符(*,也称为间接引用运算符或复引用运算符)来间接引用指针变量所指向的数据。根据所指向的数据类型,间接引用时从指针变量存储的地址开始开始引用不同长度的数据。
- 指针常用于动态内存分配与管理,为提高在不同环境的可移植性,C语言提供了一个单目运算符sizeof来返回某些数据类型所占有的字节数。
- 如果调用函数要求被调用函数修改某些数据的值,应该把这些数据的地址作为实参传递给被调用函数的相应行参,被调用函数中的行参用指针运算符*间接修改调用函数中的对应实参值。
- 数组名作为行参时,编译程序实际上使用指针变量对其进行处理。
- 使用指向函数的指针变量作为参数,可以在不改变调用函数的情况下根据需要调用不同的函数。
有关指针的数据类型
指针可以指向不同数据类型的数据,包括函数,甚至指针类型。
多个相同类型的指针也可以构成指针数组。
定义 含义 int i; 定义整型变量。 Int *p; 定义p为指向整型数据的指针变量。 Int a[n]; 定义整型数组a,它有n个元素。 Int *p[n]; 定义指针数组p,它有n个指向整型数据的指针元素组成。 int (*p)[n]; 定义p为指向含n个元素的一维数组的指针变量。 Int f(); 定义f为返回整型数值的函数。 Int *p(); 定义p为返回指针值的函数,该指针指向整型数据。 Int (*p)(); 定义p为函数指向返回整型数据的函数的指针变量。 int **p; 定义二重指针变量p,它指向一个指向整型数据的指针变量。
有关指针运算
指针变量的加减运算。例如p++,p--,p+i,p-i,p+=i,p-=i。
指针变量的加减运算通常用于连续的存储区域中指针向前或后移动指向的位置。
指针变量的赋值。将一个对象的首地址赋给一个指针变量。如:
赋值语句 含义 p=&a; 将变量a的地址赋给p。 p=array; 将数组array的首地址赋给p。 p=&array[i]; 将数组array第i个元素的地址赋给p。 p=max; 将max函数的入口地址赋给p。 p1=p2; p1和p2为同类型指针变量,将p2的值赋给p1。 如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。
如果两个指针变量指向同一个数组的元素,则两个指针变量可以进行比较,指针值小的元素在前。
指针之间也可以和NULL进行比较,可以判断指针是否指向了内存中的某个地址。