我有一个C ++函数,我知道它会是什么,但为什么?
int c[5];
int* pc = c;
for (int i = 0; i < 5; i++)
{
c[i] = i*2;
}
*pc++;
printf("%d\n", pc-c );
答案 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)
地址距离
似乎代码试图在内存寻址空间中显示指针pc
到c
的距离。
int* pc = c;
:pc
指向c
指向的位置。 (这里pc = c
)
*pc++;
:pc
增加一个(此处为pc = c + 1
)
pc - c
:pc - c
= 1
:距离(它们之间的整数)
+------+------+------+------+------+
| | | | | |
+------+------+------+------+------+
^ ^
c pc
您可以阅读C ++标准§5.7中定义良好的指针算法[expr.add]。
答案 2 :(得分:0)
输出为1
,因为它减去地址并返回差值