其实在定义时你这样理解就很清楚答案了:
char *p;理解成char (*p);*p在一起是一个char。那么,*p+i就是*p的值加上i,而*(p+i)是在先p+i再*操作,*是什么意思呢,在这里是“取值”。所以,*(p+i)是把指针移动i个位置,再返回前地址的值。
写个C程序解释吧。
#include
int main()
{
int a[32]={9,8,7,6,5,4,3,2,1}, *p = a;
printf("%d %d\n", *p + 1, *(p + 3));
return 0;
}
输出为 10 6;
为什么呢?因为 *p = a 把 a 数组的首地址的值放在 p 处,所以p = a,*p =a[0]= 9 => *p + 1 = 9 + 1 = 10.
p + 3 就是a数组的首地址往后移动3位,即p = a[0], p + 3 = a[3]的值,就是6了。
地址加i,地址变了。
地址