在函数中将指针赋值到不同的地址
Assigning pointer to a different address in function
只是好奇这是怎么解释的?
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()。
在C语言中,指针是按值传递的,就像整型、浮点数等一样。如果你想修改它并让修改在函数调用之外可见,你需要传递一个指针指向你想要修改的东西,在这个例子中是一个指向int型指针的指针:
void f(int **x) {
*x = &test;
}
然而,在c++中传递引用是一种更好的方法:
void f(int*& x) {
x = &test;
}
如果你把问题标为C,你教的内容是可以接受的。对于c++来说,这在技术上是正确的,但在道德上是错误的,你应该通过引用传递来修改对象,而不是摆弄指针和地址。
在你的代码中,你得到了你编码的目的:传递一个指针,然后重新分配指针的值。这在函数外是不可见的。你要做的是
void f(int *x)
{
*x = 42;
}
和c++版本是:
void f(int &x)
{
x = 42;
}
int main()
{
int z = 35;
f(z);
cout << z;
}
由于其中一个成员的推荐,我添加了我自己的答案,这是我从其他人的回答中得出的。所以感谢他们。基本上,我的代码中的问题是我正在更改指针的副本。
函数f中的x
和传递给f的值a
唯一的共同点是它们指向的地址
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为指针指向的地址赋值?C++
- 赋值不起作用,但带有取消引用运算符的地址起作用?
- 为什么使用 push_back() 赋值时向量元素的地址不连续
- 在函数中将指针赋值到不同的地址
- 我如何通过使用二维数组的地址来赋值
- 为什么我必须将地址强制转换为整数以使其可赋值?
- 将一个char指针赋值给另一个(不同的地址)的意外结果
- 赋值给const char*的c++字符串在第n次迭代时导致地址越界
- 如果我使用一个结构体来携带argc和argv,我如何将地址argv赋值给结构体中的变量?
- 将地址赋值给整型变量