我最近正在查看 Google 的C++ 材料,并遇到了以下用于演示指针的代码
void Unknown(int *p, int num);
void HardToFollow(int *p, int q, int *num);
void Unknown(int *p, int num) {
int *q;
q = #
*p = *q + 2;
num = 7;
}
void HardToFollow(int *p, int q, int *num) {
*p = q + *num;
*num = q;
num = p;
p = &q;
Unknown(num, *p);
}
main() {
int *q;
int trouble[3];
trouble[0] = 1;
q = &trouble[1];
*q = 2;
trouble[2] = 3;
HardToFollow(q, trouble[0], &trouble[2]);
Unknown(&trouble[0], *q);
cout << *q << " " << trouble[0] << " " << trouble[2];
}
我的问题如下: q 指针最初分配给了麻烦[1]。当发送到 HardToFollow 时,q 指针(现在称为 p)被更新为 4 的值,并且故障 [1] 随后也被更新。紧接着,原来的 q 指针(同样,在这个函数中称为 p)被重定向到指向一个局部变量(p = &q)。然而,到程序结束时,我们原来的 q 指针又回到了指向麻烦[1]。这怎么发生的?