C语言指针问题,*p++问题

图片说明
书上说*p++是先引用p的值,实现*p的运算,然后使p自增1,然后自己测试了一下,确实是这样,但是我的疑惑是为什么结合方向是自右向左,如果是自右向左的话,按照书上说的*p++相当于*(p++),那不是应该先让p自增1,然后用*p来取值,但是实测确实是按照*p先取值,然后再自增,自己写的代码如下
#include
void main()
{
int a[4]={0,0,0,0};
int *p;
p=a;
printf("更改前p的地址=%d\n",p);
printf("指针更改前a[0]=%d\n",a[0]);
printf("指针更改前a[1]=%d\n",a[1]);
*p++=10;
printf("更改后p的地址=%d\n",p);
printf("指针更改后a[0]=%d\n",a[0]);
printf("指针更改后a[1]=%d\n",a[1]);
}
图片说明
不明想这样为什么是自右向左结合,如果是自右向左的话*p++不就应该是(*p)++吗?求大神解答下,谢谢

4个回答

不是 (*p++)
而是 (*p)
然后p++
*p++=10;
就是p指向的存储变成10
然后p++,p向后移动4字节。

p++的意思为:(p++) 指的是指针的移动
(*p)++才是*p=*p+1

p++等于(p++)。接着我们来看这个括号内表达式的值p++。假设表达式的结果为a。那么则为a=p++ ,先进行赋值a=p,然后才是p=p+1。所以: (*(p++))=*(a)即为p自加之前的值。。建议不懂得,在回顾一下自加自减运算

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问