【发布时间】:2016-04-24 16:04:52
【问题描述】:
我在概念上对在以下情况下看到的内容感到困惑:指针通过引用从 main() 传递到函数 ( func1() )。 func1() 然后进一步通过引用将此指针传递给 func2()。现在如果 func2() 更新指针,使其指向一个新地址,这会反映在 main() 中。
疑问:
1. 是不是在后台某种指针对指针的指针?
2. 当 ptr1 和 ptr2 在 main() 中通过引用传递时, func1() 中的引用 *&ptr1 和 *&ptr2 不是被初始化为 NULL 吗?我读过引用不能初始化为 NULL。
#include <iostream>
using namespace std;
void func2(int *&ptr2)
{
int var2 = 123;
ptr2 = &var2;
cout << endl <<"func2 - ptr2: " << ptr2 << endl;
}
void func1(int *&ptr1, int *&ptr2)
{
int var1 = 111;
ptr1 = &var1;
func2(ptr2);
cout << endl << "func1 - ptr1: " << ptr1 << " ptr2: " << ptr2 << endl;
}
int main()
{
int *ptr1 = NULL;
int *ptr2 = NULL;
cout << "main - ptr1: " << ptr1 << " ptr2: " << ptr2 << endl;
func1(ptr1, ptr2);
cout << "main now - ptr1: " << ptr1 << " ptr2: " << ptr2 << endl;
return 0;
}
输出:
main - ptr1: 0 ptr2: 0
func2 - ptr2: 0x28fe3c
func1 - ptr1: 0x28fe6c ptr2: 0x28fe3c
main now - ptr1: 0x28fe6c ptr2: 0x28fe3c
【问题讨论】:
-
这就是使用引用的重点。如果您从函数中删除引用 & ,则修改将不可见。事实上, ref 运算符可以被视为省略额外指针的便利。
-
引用就像它所引用的对象的另一个名称。就像一个别名。
-
该代码的用途是什么?
-
@perencia 只是为了理解指针和参考:)
标签: c++ pointers pass-by-reference