70,040
社区成员
发帖
与我相关
我的任务
分享
int main()
{
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*(++ptr),*ptr);
}printf("%d,%d",*ptr,*(++ptr));输出还是8,8
int a, b;
a = 2;
b = (++a) * (++a) * (++a);
printf("%d", b);
gcc结果是80,很多人都觉得应该是60
感觉是这样的:
++a;//a == 3
b = 3 * (++a) * (++a);
++a;//a == 4
b = 3 * 4 * (++a);
++a;//a == 5
b = 3 * 4 * 5 == 60
但是编译器其实是这样执行的:
++a;
++a;//a == 4
b = a * a == 16;
++a;//a == 5
b = b * a == 80;
所以楼主的情况可能是一样的。编译器先把(*ptr,*(++ptr))整个看完了,并且在看到++ptr的时候把ptr给++了,而不是我们以为的先把ptr显示了再++ptrprintf("%d,%d",*(++ptr),*ptr);和printf("%d,%d",*ptr,*(++ptr));输出都是8,8???

