在指针指向数组元素的时候,可以对指针进行如下运算:
加一个整数,如p+1;
减一个整数,如p-1;
自加运算,如p++,++p;
自减运算,如p--,--p;
两个指针相减,如p1-p2(p1和p2都指向同一个数组中的元素才有意义)
(1)如指针变量p指向数组中的一个元素,则p+1指向同一个数组中的下一个元素,p-1指向同一数组的上一个元素。注:执行p+1的时候并不是将p的值(地址)简单的加1,而是加上一个数组元素所占用的字节数。
(2)如果p的初值为&a[0],则p+i和a+i就是数组元素a[i]的地址,或者说他们指向数组序号为i的元素。
(3)*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。例如*(p+5)和*(a+5)就是a[5]。实际上,*(p+5)和*(a+5)和a[5]等价。
(4)如果指针变量p1和p2都指向同一数组,如执行p2-p1,结果是两个值之差除以数组元素的长度。假设,p2指向实型数组元素a[5], p2的值为2020;p1指向a[3],其值为2012,则p2- p1的结果是(2020- 2012)/4=2。 这个结果是有意义的,表示p2所指的元素与pl所指的元素之间差2个元素。这样,人们就不需要具体地知道p1和p2的值,然后去计算它们的相对位置,而是直接用p2 -p1就可知道它们所指元素的相对距离。两个地址不能相加,如p1 + p2是无实际意义的。
指针运算:(1)p++(2)*p++等价于*(p++)(3)*(++p)(4)(*p)++
对于第2个*p++,实际上优先运行的后缀自加运算,原因是后缀自加运算的优先级高于间接取址符。