第1个回答 2021-11-20
type* pointer = 0;
type* pointer = NULL;
type* pointer = nullptr;
这三者在很多时候都可以混用,但是作为比较严谨的码农要明白这三者的差别。
先说nullptr,这个是C++11标准中新加入的,也是最推荐的,唯一一个空指针的字面值,可以说是标准里,唯一给空指针的合法值。但是nullptr具体的值由编译器、运行平台来决定。
然后是NULL,这个是cstdlib中定义的一个宏,在语义上用来表示空指针的值,可以说是在标准没有指定合法值之前的一种惯用法。常见于C++11标准之前的程序。NULL的具体值也由编译器、运行平台来决定。相比于nullptr,它毕竟不是标准认可的,所以地位仍然尴尬。
最后,就是0,之所以取这个值是因为在多数操作系统中,都使用虚拟内存地址,就是程序运行时,在它的视角看,内存就是一个长长的数组,其中从0到某个值的范围都是操作系统的地盘,如果指向操作系统的最低地址,并试图对这个指针进行解引,由于程序仅仅运行在用户态上,操作系统就会返回错误,此时程序就知道这个指针是空的。可以说这种将0赋值给指针的方法是平台相关的,会导致代码有不可移植的潜在风险。