书上说*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)++吗?求大神解答下,谢谢
http://blog.csdn.net/niuyongjie/article/details/2490869
不是 (*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自加之前的值。。建议不懂得,在回顾一下自加自减运算