int b[2], *ptr;
b[0] = 5;
b[1] = 7;
ptr = &b[0];
*ptr++ = 66;
printf("%d", *ptr);
为什么我可以执行 *ptr++ = 66
行,即使 = 66
位似乎什么都不做?当我打印 *ptr
时,它是 7。谁能解释为什么?编译器不应该提示 = 66
位没有效果吗?
难道 *ptr++ = 66
基本上等同于 7 = 66
吗?
最佳答案
这是怎么回事:
b[0]
被分配了66
值,因为您正在引用ptr
,即您正在做*ptr
,然后执行赋值指针本身递增,即
&b[0]++
,变为&b[1]
ptr
现在指向b[1]
,即7
换句话说:递增和赋值是在两个完全不同的事情上进行的。由于它是后缀递增,因此指针在其原始地址接收到新值后递增。
关于C - 为什么允许我这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610132/