#include
void main()
{
int a[]={1,2,3};
int *p;
p=a;
*p++=5;
(*p)++;
printf("%d%d%d",a[0],a[1],a[2]);
}
5 3 3
*、++、--等单目运算符都是右结合,也就是说*p++相当于*(p++),即先把5赋值给*p(a[0],a[0]=5),再把p指向a[1](p=&a[1]),然后(*p)++就相当于(a[1]++,即a[1=3]),最后依次输出a[0]、a[1]、a[2]当然是5 3 3了。
其实这里面的重点就是*,++的优先级问题,还有p++的意思是先用后加,问题是加了多少个字节,实际是一个int型所占有的字节,一般是4,也有可能是8,再不行的话,自己可以用一些图形化界面的编译器debug一下
p++值是p,但是p+=1了。所以a[0]=5。然后p指向的内容,就是a[1]+=1了。
5 3 3
*p=a指p=&a[0]
*p++=5指*p=5,p=p+1,即a[0]=5。此时p=&a[1]
(*p)++就相当于a[1]++,即a[1]=3
a[2]不变
好像是5 3 3