【发布时间】:2017-10-21 15:08:16
【问题描述】:
#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。我花了很多时间试图理解,但我无法理解。
希望有人可以在这里帮助我。
【问题讨论】:
-
使用调试器。
-
除了使用调试器单步调试代码之外,我建议您阅读good C++ book。语句
num = p; p = &q;仅修改变量的本地副本,并且一旦函数返回,此类更改不会保留。 -
@AlgirdasPreidžius,代码很好。这显然是一个“难以理解”的例子,教师提供了一个强迫学生理解为什么两个输出不同的例子。我相信老师不希望学生在stackoverflow上问解释。
-
@CostantinoGrana 我在哪里说不是?我说明了观察到的输出不同的原因。请重新阅读代码和我的评论。
-
@AlgirdasPreidžius 谢谢!但我不明白为什么当函数返回主函数中 *q 的值为 4 时。