对于指向数组的指针变量,可以加上或减去一个整数 n。设 pa 是指向数组 a 的指针变
量,则 pa+n,pa-n,pa++,++pa,pa--,--pa 运算都是合法的。指针变量加或减一个整数 n 的
意义是把指针指向的当前位置(指向某数组元素)向前或向后移动 n 个位置。应该注意,数组
指针变量向前或向后移动一个位置和地址加 1 或减 1 在概念上是不同的。因为数组可以有
不同的类型, 各种类型的数组元素所占的字节长度是不同的。如指针变量加 1,即向后移
动 1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加 1。
例如:
int a[5],*pa;
pa=a; /*pa 指向数组 a,也是指向 a[0]*/
pa=pa+2; /*pa 指向 a[2],即 pa 的值为&pa[2]*/ 指针变量的加减运算只能对数组指针变量
进行, 对指向其它类型变量的指针变量作加减运算是毫无意义的。(3)两个指针变量之间的
运算只有指向同一数组的两个指针变量之间才能进行运算, 否则运算毫无意义。
①两指针变量相减
两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针
值(地址) 相减之差再除以该数组元素的长度(字节数)。例如 pf1 和 pf2 是指向同一浮点数
组的两个指针变量,设 pf1 的值为 2010H,pf2 的值为 2000H,而浮点数组每个元素占 4 个
字节,所以 pf1-pf2 的结果为(2000H-2010H)/4=4,表示 pf1 和 pf2 之间相差 4 个元素。两
个指针变量不能进行加法运算。 例如, pf1+pf2 是什么意思呢?毫无实际意义。
②两指针变量进行关系运算
指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。例如:
pf1==pf2 表示 pf1 和 pf2 指向同一数组元素
pf1>pf2 表示 pf1 处于高地址位置
pf1<pf2 表示 pf2 处于低地址位置
main(){
int a=10,b=20,s,t,*pa,*pb;
pa=&a;
pb=&b;
s=*pa+*pb;
t=*pa**pb;
printf("a=%d\nb=%d\na+b=%d\na*b=%d\n",a,b,a+b,a*b);
printf("s=%d\nt=%d\n",s,t);
}
......
说明 pa,pb 为整型指针变量
给指针变量 pa 赋值,pa 指向变量 a。
给指针变量 pb 赋值,pb 指向变量 b。
本行的意义是求 a+b 之和,(*pa 就是 a,*pb 就是 b)。
本行是求 a*b 之积。
输出结果。
输出结果。
......