gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:15:11 25 4
gpt4 key购买 nike

#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是否为空。既然是用值初始化的,那么它是not-null?
之后,函数 foo叫做。这里,函数的参数int *&ptr可以理解为 int* &ptr ,即这个函数 foo 接受 int* (指针参数),由于 &,它是按引用传递的在 int* &ptr .由于是引用传递,指针的内容ptr已更新。所以函数调用后,指针变量ptr现在有一个值 nullptr .这就是为什么下一个 std::cout将在屏幕上打印 null。

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

最佳答案

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

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

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

关于

"null" is like nothing in C++, right? So nullptr is like a pointer which points to nothing?

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

关于c++ - 在 C++ 中通过引用传递指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58929990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com