这段代码的输出是什么?为什么?

时间:2013-05-24 16:01:25

标签: c++ c pointers printf

我有一个C ++函数,我知道它会是什么,但为什么?

int c[5];
int* pc = c;

for (int i = 0; i < 5; i++)
{
    c[i] = i*2;
}
*pc++;
printf("%d\n", pc-c );

3 个答案:

答案 0 :(得分:5)

有很多垃圾代码正在进行中。这是印刷品唯一重要的东西:

int c[5];              // c is a pointer
int* pc = c;           // pc points to the same thing as c.
pc++;                  // pc now points to one-past-where-c-points-to
printf("%d\n", pc-c ); // will print the pointer differences. 1.

请注意

*pc++;

实际上意味着

*(pc++);

不同
(*pc)++;

如有疑问,请始终使用括号。

答案 1 :(得分:2)

地址距离

似乎代码试图在内存寻址空间中显示指针pcc的距离。

  1. int* pc = c;pc指向c指向的位置。 (这里pc = c

  2. *pc++;pc增加一个(此处为pc = c + 1

  3. pc - cpc - c = 1距离(它们之间的整数)

  4.  +------+------+------+------+------+
     |      |      |      |      |      |
     +------+------+------+------+------+
     ^      ^
     c      pc
    

    您可以阅读C ++标准§5.7中定义良好的指针算法[expr.add]。

答案 2 :(得分:0)

输出为1,因为它减去地址并返回差值