关于c ++:指针通过引用传递?

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


不,后台没有"指向指针的指针"吗?.

只有一个指针。

传递对对象的引用实质上是传递指向被引用对象的指针。然后,如果该引用作为第二个引用传递,则会像现在一样传递同一个实际的、内部的指针。因此,第二个函数接收的内部指针与第一个函数相同。