只是好奇这是什么解释?
void f(int * x);
int test = 100;
int main()
{
int z = 35;
int * a = &z;
f(a);
cout<<*a;
..
}
void f(int *x)
{
x = &test;
}
我们被告知如果我们想要修改“外部”对象(在这种情况下为a
),我们可以在函数参数中使用指针。但是x = &test
没有做太多,cout
仍然打印35。
我知道*x =someVal
可以在f()中使用。
答案 0 :(得分:2)
如果你标记问题C,你所教的内容是可以接受的。对于C ++来说,它在技术上是正确的,但在道德上是错误的,你应该通过引用来修改对象,而不是摆弄指针和地址。
在你的代码中,你得到你编码的内容:传递一个指针然后重新分配那个poitner的值。这在功能之外是不可见的。你打算做的是
void f(int *x)
{
*x = 42;
}
和C ++版本就像:
void f(int &x)
{
x = 42;
}
int main()
{
int z = 35;
f(z);
cout << z;
}
答案 1 :(得分:2)
在C指针中,值就像整数,浮点数等一样传递。因此,如果你想修改它并在函数调用之外看到那个修改,你需要传递一个指向要修改的东西的指针,在这种情况下,这是一个指向int指针的指针:
void f(int **x) {
*x = &test;
}
但是,在C ++中传递引用是一种更好的方法:
void f(int*& x) {
x = &test;
}
答案 2 :(得分:1)
由于其中一位成员的推荐,我正在添加我自己的回答,这是我从其他人的反应中得出的。所以,谢谢他们。 基本上我的代码中的问题是我正在更改指针的副本。
函数f中唯一的x
和传递给f的值a
的共同点是指向的地址。