c++ - 通过引用传递指针与将指针传递给函数
问题描述
自从我用 C++ 编写任何东西以来已经有一段时间了。当我作为 CIS Tutor 试图帮助另一个人时,他想知道为什么在指向 int 的指针旁边有一个 & 符号是必要的。
我想如果你通过引用传递一个指针并且你指向别的东西,主要知道在你传递之后 val 将等于你设置它等于的任何值。
下面会有一个例子来说明我想说什么。
这个对吗?
//main function
int variable = 0;
int* val = &variable;
function1(val);
cout << *val << endl;
function2(val);
cout << *val << endl;
//Passing in a pointer with reference.
void function1(int*& value)
{
int variable = 9;
value = &variable;
}
//Passing in a pointer without reference.
void function2(int* val)
{
int variable = 9;
value = &variable;
}
我的假设是程序将输出 9 而不是 8 或 0。我希望这能让你们清楚地了解我想要问的问题。
解决方案
传递值和传递引用之间的区别对于指针和其他值是一样的(实际上指针并没有什么特别之处,它们只是保存有时是其他对象的地址的数字)。
与int
:
void foo(int x) { x = 1; }
void bar(int& x) { x = 2; }
int main() {
int y = 5;
foo(y);
std::cout << y; // prints 5
bar(y);
std::cout << y; // prints 2
}
现在有指针:
void foo(int* x) { x = 0; }
void bar(int*& x) { x = 0; }
int main() {
int y = 42;
int* z = &y;
foo(z);
std::cout << z; // prints the address of y
bar(z);
std::cout << z; // prints 0
}
请注意,您的function1
已损坏,因为当您调用它时
int* y;
function1(y);
std::cout << *y; // **baaam**
// the value y points to is already gone
int
当函数返回并且调用者不能以任何有意义的方式使用该值时,函数内部将结束其生命周期。请注意,在此特定示例中,您可能会打印出“正确”的值,但这只是巧合,y
在将其传递给function1
未定义行为后取消引用。
推荐阅读
- return - 如何不提示变量的结果(使用返回脚本)?
- google-bigquery - BigQuery 服务器位置比较:欧盟位置是否比美国位置快得多?
- javascript - 根据条件排列对象数组
- javascript - 如何使 forEach 函数在函数内结束以继续在 Javascript 中进一步执行
- html - html/css - 具有固定宽度侧边栏的灵活内容块
- javascript - 在反应中将多个返回从类组件转换为功能组件
- java - 当滚动策略到达索引 996 时,Logback 停止删除归档日志
- typescript - TypeScript 界面只突出单个问题,而不是多个
- kubernetes - 我可以在运行 helm upgrade 命令期间切换 k8s 上下文吗?
- javascript - 如何在嵌套数组中通过 id 查找元素