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
吗?
答案 0 :(得分:6)
这是怎么回事:
b[0]
被分配了66
的值,因为您正在引用ptr
,即您正在执行*ptr
,然后执行分配
指针本身递增,即&b[0]++
,后者变为&b[1]
ptr
现在指向b[1]
,即7
换句话说:增量和分配是在两个完全不同的事情上进行的。并且因为它是后缀增量,所以在其原始地址接收到新值后,指针会递增。
答案 1 :(得分:2)
你正在递增指针。之后它指向b [1]。 b [0]的值可能是66。
答案 2 :(得分:1)
ptr++
被称为 post increment ,这意味着您首先使用ptr
的旧值(覆盖5
}),然后递增ptr
。
答案 3 :(得分:1)
增加指针。如果要增加指针的值,请使用(*ptr)++
。
请参阅此precedence table