我开始学习 C++。关于指针,特别是 NULL 指针,我遇到了一些小困惑。根据我的理解,当您声明一个指针并将其设置为指向一个值时,您可以执行以下操作:
int var = 10;
int *ptr;
ptr = &var;
*ptr = 20;
这会将 var 的值更改为 20。但是当您设置 NULL 指针时,您将执行以下操作:
int *ptr = NULL;
这是否意味着您将 NULL 值分配给 ptr 指向的任何变量而不是地址,因为 * 运算符?我认为 NULL 指针的值(它的地址)为 0,所以根据我的阅读,它指向任何地方。这样做是否更有意义:
int *ptr;
ptr = NULL // or 0?
将不胜感激通俗易懂的解释,我在编写代码和研究时仍在学习所有术语,因此我很乐意解释您使用的任何编程术语。
最佳答案
通过说 int *ptr = NULL;
你是在说“我正在声明一个名为 ptr
的 int 指针,我想指向位置 0
(NULL
)。这就是它所说的全部内容。
现在,如果您尝试读取或写入 ptr
,您将得到未定义的行为,这通常是一个糟糕的地方(比仅仅得到一个错误更糟糕,因为你的程序可能会在其他地方开始出现问题,而你不知道为什么)。但通常,NULL
指针用于表示不应使用它且必须对其进行初始化。
正如大卫施瓦茨所说,
It will be easier to understand if you use
int* ptr
instead ofint *ptr
.
这是因为ptr
的类型实际上是int*
,一个指向整数的指针。声明类型时,*
表示指针。只有在 *ptr = 20
等表达式中使用指针时,*
才表示“取消引用”。
关于c++ - C++中的空指针声明混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060449/