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

Dan*_*T29 0 c++ null-pointer

我开始学习C++了.我遇到了关于指针的小混乱,特别是NULL指针.根据我的理解,当您声明指针并将其设置为指向值时,您可以执行以下操作:

    int var = 10;
    int *ptr;
    ptr = &var;
    *ptr = 20;
Run Code Online (Sandbox Code Playgroud)

这会将var的值更改为20.但是当您设置NULL指针时,您将执行以下操作:

int *ptr = NULL;
Run Code Online (Sandbox Code Playgroud)

这是不是意味着你将值NULL分配给ptr指向的任何变量而不是地址,因为*运算符?我认为一个NULL指针的值(它的地址)为0,所以它从我读到的地方找不到任何地方.这样做会更有意义吗:

int *ptr;
ptr = NULL // or 0?
Run Code Online (Sandbox Code Playgroud)

外行术语的解释将不胜感激,我仍在学习所有的术语,因为我编码和研究,所以我喜欢你使用的任何编程术语的解释.

Jas*_*zun 7

通过说int *ptr = NULL;你说"我正在声明一个名为int的指针ptr,我想指向位置0(NULL).这就是它所说的.

现在,如果你试图读或写ptr你将得到未定义的行为,这通常是一个可怕的地方(更糟糕的是只是得到一个错误,因为你的程序可能开始在其他地方遇到问题,你不知道为什么).但通常,NULL当您想要表示不应该使用指针并且必须初始化时,会使用指针.

正如大卫施瓦茨所说,

如果您使用int* ptr而不是,将更容易理解int *ptr.

这是因为类型ptr实际上int*是指向整数的指针.声明类型时,*表示指针.它的表现形式,如使用指针时仅*ptr = 20*意味着"解引用".