c++ - C++中的空指针声明混淆

标签 c++ null-pointer

我开始学习 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 of int *ptr.

这是因为ptr的类型实际上是int*,一个指向整数的指针。声明类型时,* 表示指针。只有在 *ptr = 20 等表达式中使用指针时,* 才表示“取消引用”。

关于c++ - C++中的空指针声明混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060449/

相关文章:

c++ - 使用资源文件进行 C++ 编译时出错

c++ - Visual C++ 中 ARM 的 float

c - 从普通指针中减去 NULL 指针生成算术右移

c++ - 指针地址的内存在函数返回前后偶尔改变

c++ - C/C++ 不透明指针库

c++ - 从头文件c++调用另一个头文件的内联函数

c - 为什么 va_arg 在 char* 类型的变量参数列表的末尾返回 NULL?

相比之下,我可以假设 NULL 值为假吗?

c++ - 是否对空指针未定义的行为执行算术?