C++语言程序设计

指针是一种特殊的变量，它所允许的运算有下面几种：赋值运算、算术运算和关系运算。
（1） 指针的赋值运算
可以将一个变量的地址赋给一个指针，也可以将一个数组的首地址或一个函数的入口地址赋给指针，但所赋的地址值必须与指针的类型匹配。另外，相同类型的指针之间也可以相互赋值。例如：
int a,*p,*q;
p=&a;
q=p;
这样就使q与p指向的同一个变量a，即p和q都是指向变量a的指针。
另外，为了安全起见，可以将NULL（即0）赋给暂时不用的指针，使它不指向任何变量，该指针称为空指针。
（2）指针的算术运算
由于指针存放的都是内存地址，所以指针的算术运算都是整数运算。
一个指针可以加上或减去一个整数值，包括加1和减1。根据C++地址运算规则，一个指针变量加（减）一个整数并不是简单地将其地址量加（减）一个整数。而是根据其所指的数据类型的长度，计算出指针最后指向的位置。例如，p+i实际指向的地址是：
p+i*m
其中m是数据存储所需的字节数，一般情况下，字符型数据m=1，整型数据m=2，浮点型数据m=4。例如，下面的语句说明了一个int型指针变量p进行算术运算的情况。
int *p; //p=3000
p++; //p=3002
p--; //p=2FFE
因为一个整数在内存中占两个字节的空间。p++操作是使指针p指向下一个整型数据，同理可知，p--操作是使指针p指向前一个整型数据。
此外，如果两个指针所指的数据类型相同，在某些情况下，这两个指针可以相减。例如，指向同一个数组的不同元素的两个指针可以相减，其差便是这两个指针之间相隔元素的个数。又例如，在一个字符串里面，让指向字符串尾的指针和指向字符串首的指针相减，就可以得到这个字符串的长度。
（3）指针的关系运算
在某些情况下，两个指针可以相比较，但要求这两个指针指向相同类型的数据。指针间的关系运算包括：>、>=、<、<=、==、!= 。例如，比较两个指向相同数据类型的指针，如果它们相等，就说明它们指向同一个地址（即同一个数据）。
如：if(p1==p2) printf("two pointrs are equal.\n");
指向不同数据类型的指针之间进行关系运算是没有意义的。但是，一个指针可以和NULL（0）作相等或不等的关系运算，用来判断该指针是否为空。