y=(*p)++; //这么写就是3,默认是从右向左
#include main() { int x=1,y; int *p=&x; y=++(*p); printf("y=%d \n",y); printf("x=%d \n",x); y=*p++; y=*p++; printf("y=%d \n",y); printf("x=%d \n",x); }
y=2 x=2 y=2293680 x=2
C/C++ code #include main() { int x=1,y; int *p=&x; y=++(*p); printf("y=%d \n",y); printf("x=%d \n",x); y=*p++; y=*p++; printf("y=%d \n",y); printf("x=%d \n",x); } 为什么次代码的第二次y值变得很奇怪? 运行结果: C/C++ code y=2 x=2 y=2293680 x=2
引用 10 楼 asiabaa 的回复: C/C++ code #include main() { int x=1,y; int *p=&x; y=++(*p); printf("y=%d \n",y); printf("x=%d \n",x); y=*p++; y=*p++; printf("y=%d \n",y); printf("x=%d \n",x); } 为什么次代码的第二次y值变得很奇怪? 运行结果: C/C++ code y=2 x=2 y=2293680 x=2 执行第2个 y=*p++;的时候,p已经变为 p+1了,那个地址的值时不确定的;…
#include void main() { int x=1,y; int *p=&x; y=++*p; /* y=++(*p); ++在前,把*p的值+1,赋给y */ printf("y=%d \n",y); /* y=*p+1=2 */ printf("x=%d \n",x); /* x=*p,此时*p=*p+1=1+1=2 */ y=*p++; /* y=*(p++); ++在后,把*p的值赋给y; 运行完后,再使p=p+1 */ printf("y=%d \n",y); /* y=*p=2 (上面个表达式运行完后,*p值已经为2了) */ printf("x=%d \n",x); /* x=*p (上面个表达式运行完后,*p值已经为2了) */ } 大家看看最后一个x应该为多少,本人认为应该x=3,但在VC下执行结果为x=2,这是为什么啊?
#include void main() { int x=1,y; int *p=&x; y=++*p; printf("y=%d \n",y); printf("x=%d \n",x); y=(*p)++; printf("y=%d \n",y); printf("x=%d \n",x); }