一. 指针的基本操作有:赋值(assignment),求值(value-finding)或取值(dereferencing),区指针地址,将一个整数家给指针,增加指针的值,从指针中减去一个整数,减小指针的值,求差值(Differencing),比较。
下面以一个例子进行说明:
#include<stdio.h> int main(void) { int *ptr1,*ptr2,*ptr3; int urn[5] = {100,200,300,400,500}; ptr1 = urn; //把一个地址赋给指针 ptr2 = &urn[2]; //把一个地址赋给指针 printf("ptr1 = %p,*ptr1 = %d,&ptr1 = %p\n",ptr1,*ptr1,&ptr1); //指针加法 ptr3 = ptr1 +4; printf("nadding an int to a pointer:\n"); printf("ptr1 +4 = %p,*(ptr1 +3) = %d\n",ptr1+4,*(ptr1+3)); ptr1++; //递增指针 printf("\n values after ptr++\n"); printf("ptr1 = %p,*ptr1 = %d,&ptr1 = %p\n",ptr1,*ptr1,&ptr1); ptr2--; //递减指针 printf("\n values after ptr--\n"); printf("ptr2 = %p,*ptr2 = %d,&ptr2 = %p\n",ptr2,*ptr2,&ptr2); --ptr1; //恢复初始值 ++ptr2; printf("\npointers reset to original values:\n"); printf("ptr1 = %p,ptr2 = %p",ptr1,ptr2); printf("\nsubstracting one pointer from another:\n"); //一个指针减去另一个指针 printf("ptr2 = %p,ptr1 = %p,ptr2 -ptr1 = %d\n",&ptr2,ptr1,ptr2-ptr1); printf("\nsubstracting an int from another:\n"); printf("ptr3 = %p,ptr3 -2 = %p\n",ptr3,ptr3-2); //一个指针减去一个整数 return 0; }
运行结果:
ptr1 = 0026FE5C,*ptr1 = 100,&ptr1 = 0026FE90
nadding an int to a pointer:
ptr1 +4 = 0026FE6C,*(ptr1 +3) = 400
values after ptr++
ptr1 = 0026FE60,*ptr1 = 200,&ptr1 = 0026FE90
values after ptr--
ptr2 = 0026FE60,*ptr2 = 200,&ptr2 = 0026FE84
pointers reset to original values:
ptr1 = 0026FE5C,ptr2 = 0026FE64
substracting one pointer from another:
ptr2 = 0026FE84,ptr1 = 0026FE5C,ptr2 -ptr1 = 2
substracting an int from another:
ptr3 = 0026FE6C,ptr3 -2 = 0026FE64
请按任意键继续. . .
二.指针的注意事项
1.不能对未初始化的指针取值(赋值)
如:
int *pt; //一个未初始化的指针
*pt = 5; //一个可怕的错误
这段代码的第二行把数值5存储在pt所指向的地址。但是由于pt未初始化,因此的的值是随机的,不知道5会被存储到什么位置。这个位置也许会对系统危害不大,但也许会覆盖程序
数据或者代码,甚至导致程序的崩溃。切记:当创建一个指针时,系统只分配了用来存储指针本身的内存空间,并不分配用来存储数据的内容空间。因此在使用指针之前,必须给它赋予一个
以分配的内存地址。比如,可把一个以存在的变量地址赋给指针,或者使用函数malloc()来首先分配内存。