私は最近、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]。どうしてそうなった?