#include<iostream>
using namespace std;
void HardToFollow(int *p, int q, int *num);
void HardToFollow(int *p, int q, int *num) {
*p = q + *num;
*num = q;
num = p;
p = &q;
cout << *p << " " << q << " " <<*num<<endl;
// value is ``1 1 4
}
main() {
int *q;
int trouble[3];
trouble[0] = 1;
q = &trouble[1];
*q = 2;
trouble[2] = 3;
HardToFollow(q, trouble[0], &trouble[2]); // 2 1 3
cout << *q << " " << trouble[0] << " " << trouble[2]<<endl;
// value become 4 1 1}
大家好我是stackoverflow的初学者,我真的不明白为什么我在HardToFollow
函数中的第一个输出,值为1
,1
和4
。
但是当涉及主要功能输出时,它变为4
,1
和1
。我花了很多时间尝试去理解,但我不能。
希望有人可以帮助我。
答案 0 :(得分:0)
让我们看一下HardToFollow()
收到的内容,并逐行跟踪其流程。
[我在这里只是注意到,这段代码实际上很难遵循,所以我可能犯了一个错误。请仔细遵循我的逻辑,看看你是否同意。]
HardToFollow()
的开头:
请注意,p和q-in-main不是同一个变量。它们是两个指向同一位置的独立指针。这是因为(我确信这是本练习的要点之一):变量(包括指针)作为副本传递。因此,如果发送指针,则会创建指针的新副本。
*p = q + *num;
p指向的位置的值设置为q-in-HardToFollow加上num指向的位置的值。这是1加3,即4. q-in-main也指向与p相同的位置,因此其值也将改变。所以现在:
*num = q;
num指向的位置值设置为q-in-HardToFollow,即1.现在:
num = p;
num现在设置为指向与p相同的位置,即trouble [1]。所以:
p = &q;
p现在设置为指向q-in-HardToFollow的位置。所以:
所以当前的地址和值是:
这对你得到的输出效果很好。