1

只是好奇这是什么解释?

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() 中可以工作。

4

3 回答 3

2

在 C 中,指针像整数、浮点数等一样按值传递。因此,如果您想修改它并使该修改在函数调用之外可见,则需要将指针传递给要修改的东西,在此指向 int 指针的情况:

void f(int **x) {
    *x = &test;
}

但是,在 C++ 中,传递引用是一种更好的方法:

void f(int*& x) {
    x = &test;
}
于 2013-06-11T20:54:31.410 回答
2

如果您将问题标记为 C,那么您所教的内容是可以接受的。对于 C++,它在技术上是正确的,但在道德上是错误的,您应该通过引用传递来修改对象,而不是摆弄指针和地址。

在您的代码中,您将获得您编码的内容:传递一个指针,然后重新分配该指针的值。这在函数之外是不可见的。你打算做的是

void f(int *x)
{
    *x = 42;
}

C++ 版本会是这样的:

void f(int &x)
{
  x = 42;
}

int main()
{
  int z = 35;
  f(z);
  cout << z;
}
于 2013-06-11T20:46:43.600 回答
1

由于其中一位成员的推荐,我添加了我自己的答案,这是我从其他人的回答中得出的。所以感谢他们。基本上我的代码中的问题是我正在更改指针的副本。

x函数 f 和a传递给 f的值的唯一共同点是它们指向的地址

于 2013-06-11T21:34:11.600 回答