指针通过参考? (完整性检查)

时间:2016-04-24 16:04:52

标签: c++ pointers pass-by-reference

我在概念上对我在以下情况中看到的内容感到困惑:指针通过引用从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

1 个答案:

答案 0 :(得分:3)

不,后台没有“指向指针指针”吗?

只有一个指针。

传递对象的引用本质上是将指针传递给引用的对象。然后,如果该引用作为第二个引用传递,则相同的实际内部指针将按原样传递。所以第二个函数接收的内部指针与第一个函数相同。