C - 为什么我被允许这样做?

时间:2011-04-10 06:21:32

标签: c pointers

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

4 个答案:

答案 0 :(得分:6)

这是怎么回事:

  1. b[0]被分配了66的值,因为您正在引用ptr,即您正在执行*ptr,然后执行分配

  2. 指针本身递增,即&b[0]++,后者变为&b[1]

  3. ptr现在指向b[1],即7

  4. 换句话说:增量和分配是在两个完全不同的事情上进行的。并且因为它是后缀增量,所以在其原始地址接收到新值后,指针会递增

答案 1 :(得分:2)

你正在递增指针。之后它指向b [1]。 b [0]的值可能是66。

答案 2 :(得分:1)

ptr++被称为 post increment ,这意味着您首先使用ptr的旧值(覆盖5 }),然后递增ptr

答案 3 :(得分:1)

增加指针。如果要增加指针的值,请使用(*ptr)++

请参阅此precedence table