以前都是用0来表示空指针的,但由于0可以被隐式类型转换为整形,这就会存在一些问题。
定义 NULL 只是为了方便代码的阅读,NULL 本身就是 0
除了看起来不一样,其他都一样
指针就是计算机内存地址,也就是整形。 0即空指针,没啥隐患。
有一些细节问题,比如
if (p = 0)
由于将==写成了=,结果将p设置为野指针了
再比如 **p 被误写作 *p,这种错误很难发现。
1楼和2楼的同学已经给出了答案,同意。
NULL这是0,本身没什么问题,只是你做逻辑判断的时候容易出错,最好用nullptr,代替。
#define NULL 0
int a=NULL; 没问题,如果写成int a=nullptr, 就不行了,所以防止出错。
C中本来指针就 不能算整数,只是可以用整数表示
C++ 干脆用 0 表示 NULL指针;
这样遇到 函数重载 参数分别是 整数和指针 的时候,
传入NULL指针,
容易出现二义性错误
这是个很麻烦,但是有很少遇到的特性
一旦出现,就会很麻烦
nullptr 则不会
所以有编译器定义了nullptr,标准也采用了
此前有些书籍,也讨论过这个问题.
路过水一贴,O(∩_∩)O。
这个避免还得自己写代码时注意吧?!
在项目里,空指针应该指向特定地址,这里一般需要用宏定义起来,要确保空指针取值不崩溃;不然的话指针取值函数*p 和 **p容易出现取址错误。
以前都是用0来表示空指针的,但由于0可以被隐式类型转换为整形,这就会存在一些问题。