int b[2], *ptr;
b[0] = 5;
b[1] = 7;
ptr = &b[0];
*ptr++ = 66;
printf("%d", *ptr);
Run Code Online (Sandbox Code Playgroud)
为什么我被允许做*ptr++ = 66行,即使这= 66一点似乎什么都不做?当我打印*ptr它的时候7.有人可以解释原因吗?编译器是否应该抱怨= 66没有效果?
*ptr++ = 66基本上不等同于7 = 66?
这是怎么回事:
b[0]被分配一个值66因为你正在引用ptr,即你正在做*ptr,然后执行赋值
指针本身递增,即&b[0]++变为&b[1]
ptr现在正指向b[1],这是7
换句话说:增量和赋值是在两个完全不同的东西上进行的.并且因为它是后缀增量,所以指针在其原始地址接收到新值后递增.