在c ++中通过引用传递指针?

#include <iostream>

void foo(int *&ptr) // pass pointer by reference
{
    ptr = nullptr; // this changes the actual ptr argument passed in,not a copy
}

int main()
{
    int x = 5;
    int *ptr = &x;     // create a pointer variable ptr,which is initialize with the memory address of x; that is,ptr is a pointer which is pointing to int variable x
    std::cout << "ptr is: " << (ptr ? "non-null" : "null") << '\n'; // prints non-null
    foo(ptr);
    std::cout << "ptr is: " << (ptr ? "non-null" : "null") << '\n'; // prints null

    return 0;
}

这是我在上面的代码中的理解方式。

在main函数中,首先定义局部变量x
然后,定义一个名称为ptr的指针变量,该变量用x的内存地址初始化;即ptr是一个指向int变量x的指针变量。
之后,检查ptr是否为空。由于它是使用值初始化的,因此不是null吗?
之后,将调用函数foo。在这里,函数int *&ptr的参数可以理解为 int* &ptr,即此函数foo接受int*(指针参数),并且由于&中的int* &ptr而成为引用传递。由于它是按引用传递的,因此指针ptr的内容被更新。因此,在函数调用之后,指针变量ptr现在具有值nullptr。这就是为什么下一个std::cout将在屏幕上显示null的原因。

我希望我能正确理解。一个不相关的问题:null在C ++中是什么,对吗?所以nullptr就像一个指向什么都没有的指针?

dianasry 回答:在c ++中通过引用传递指针?

您对代码的理解是正确的。使用别名时,有时更容易理解指向指针的指针和指针引用:

using int_ptr = int*;
void foo(int_ptr& ptr) // pass int_ptr by reference
{
    ptr = nullptr; // change the int_ptr that is referenced
}

这种别​​名通常不应该在真实代码中使用。

关于

  

“空”在C ++中什么都没有,对吧?那么nullptr就像一个指向什么都没有的指针?

是的,根据定义nullptr并不指向对象或函数(因此不能取消引用)。 null作为关键字在C ++中不存在。 有关C ++ here

中的空指针的更多信息 ,

是的,您对代码的理解是正确的。只要有可能,就可以对较简单的情况(例如您的情况下的整数)进行类比来理解事物。指针是保留内存地址的变量。空指针的概念意味着指针没有指向任何东西。您可以找到有关空概念here的更多信息。

本文链接:https://www.f2er.com/3075117.html

大家都在问