我在概念上对我在以下情况中看到的内容感到困惑:指针通过引用从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
答案 0 :(得分:3)
不,后台没有“指向指针指针”吗?
只有一个指针。
传递对象的引用本质上是将指针传递给引用的对象。然后,如果该引用作为第二个引用传递,则相同的实际内部指针将按原样传递。所以第二个函数接收的内部指针与第一个函数相同。