-1

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

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

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

3 回答 3

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)++;

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

于 2013-05-24T16:12:41.347 回答
2

地址距离

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

  1. int* pc = c;: pc指向 指向的地方c。(这里pc = c

  2. *pc++;pc增加了一个(这里pc = c + 1

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

 

 +------+------+------+------+------+
 |      |      |      |      |      |
 +------+------+------+------+------+
 ^      ^
 c      pc

您可以在 C++ 标准的第 5.7 节中阅读有关定义明确的指针算术 [expr.add] 的内容。

于 2013-05-24T16:05:03.467 回答
0

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

于 2013-05-24T16:05:50.290 回答