指针操作
C提供了一些基本的指针操作,下面的程序实例中演示了8种不同的操作。


-
赋值:
可以把地址赋给指针。例如,用数组名、带地址运算符(&)的变量名、另一个指针进行赋值。注意,地址应该和指针类型兼容,就说是不要把double类型的地址赋值给Int类型的指针。
-
解引用:
*运算符给出指针指向地址上存储的值;
-
取址:
和所有变量一样,指针也有自己的地址和值。对指针而言,&运算符给出指针本身的地址;
-
指针与整数相加:
可以使用+运算符把指针与整数相加。整数会和指针所指向类型的大小相乘,然后把结果与原始地址相加,如果相加结果超出数组范围则结果未知。除非正好为数组末尾的下一位,C保证该数组有效;
-
递增指针:
递增指向数组元素的指针可以让该指针移动至数组的下一个元素,原理与指针与整数相加差不多,整数固定为了1。且都不会改变指针本身的地址;
-
指针减去一个整数:
可以使用-运算符把指针与整数相减,被减数必须是指针。整数会和指针所指向类型的大小相乘,然后把结果与原始地址相减,如果相减结果超出数组范围则结果未知。除非正好为数组末尾的下一位,C保证该数组有效;
-
递减指针:
与递增指针原理一样,可以让该指针移动至数组的上一个元素;
-
指针求差:
可以计算两个指针的差值。通常,求差的两个指针分别指向同一个数组的不同元素,通过计算求出两元素之间的距离
-
比较:
使用关系运算符可以比较两个指针的值,前提是来自同一个数组;
注:这里的减法有两种。可以用指针减另一个指针得到一个整数(这个加法不行),或者指针减整数得到另一个指针。
在递增或递减指针时还要注意一些问题。编译器不会检查指针是否仍指向数组中的元素。C只能保证指向数组任意元素的指针和指向数组后面第一个位置的指针有效。但是指向数组后面第一个位置的指针有效,也不能保证可以解引用这样的越界指针。
不要解引用未初始化的指针,因为创建一个指针时,系统只分配了存储指针本身的内存,未分配存储数据的内存,在使用指针前必须先用已分配的地址初始化它。例如,可以用一个现有变量的地址初始化该指针(带指针形参的函数:数组之类)或者使用malloc()函数分配内存。

浙公网安备 33010602011771号