空指针0可以被隐式类型转换为整型,会带来什么隐患?

以前都是用0来表示空指针的,但由于0可以被隐式类型转换为整形,这就会存在一些问题。

  1. 一个是语义上的,NULL用来表示空指针,而0是数字的概念,分别开来,从语法上好理解和区分,防止混淆
  2. 防止隐式转换,比如该是指针的地方,却用了数字,该是数字的地方却用了指针。
  3. 所以在C++11中,引入了nullptr的关键字来代替NULL,它就不是数字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可以被隐式类型转换为整形,这就会存在一些问题。