C语言问题。 *p+i与*(p+i)有什么区别啊?

2024-11-07 10:02:23
推荐回答(3个)
回答1:

其实在定义时你这样理解就很清楚答案了:
char *p;理解成char (*p);*p在一起是一个char。那么,*p+i就是*p的值加上i,而*(p+i)是在先p+i再*操作,*是什么意思呢,在这里是“取值”。所以,*(p+i)是把指针移动i个位置,再返回前地址的值。

回答2:

写个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了。

回答3:

地址加i,地址变了。
地址