无法理解这个简单的代码输出

man*_*ams 3 c

码:

int a = 5;
int *ptr;
ptr = &a;

printf("%d",*ptr);
printf("\n%d",*(ptr++));
printf("\n%d",(*ptr)++);
printf("\n%d",++(*ptr));
Run Code Online (Sandbox Code Playgroud)

输出:

5
5
1638268
1638268
Run Code Online (Sandbox Code Playgroud)

我期待输出为:5垃圾5 7 Sory,我的指针和运算符优先级概念非常暗淡.无法理解这个简单的输出.

aar*_*man 6

  1. 第一个显然是5,只是解除引用指针
  2. 还有五个因为后缀运算符返回指针preincrement
  3. 3和4是垃圾,因为指针不再指向已分配的内存

如果你想在第二个像你期望和打印垃圾,你可以使用前缀++,而不是