70,023
社区成员




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???