Pointers passed by reference? (Sanity check)
在下面的情况中,我在概念上对所看到的内容感到困惑:一个指针通过引用从main()传递到函数(func1())。func1()然后通过引用进一步将此指针传递给func2()。现在,如果func2()更新指针,使其指向一个新地址,这将在main()中反映出来。
怀疑:
1。它是某种指向后台指针的指针吗?
2。当ptr1和ptr2通过main()中的引用传递时,func1()中的引用*&;ptr1和*&;ptr2是否初始化为空?我已经读到引用不能初始化为空。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #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; } |
输出:
1 2 3 4 5 6 | main - ptr1: 0 ptr2: 0 func2 - ptr2: 0x28fe3c func1 - ptr1: 0x28fe6c ptr2: 0x28fe3c main now - ptr1: 0x28fe6c ptr2: 0x28fe3c |
不,后台没有"指向指针的指针"吗?.
只有一个指针。
传递对对象的引用实质上是传递指向被引用对象的指针。然后,如果该引用作为第二个引用传递,则会像现在一样传递同一个实际的、内部的指针。因此,第二个函数接收的内部指针与第一个函数相同。