2 x yz x_yz_ 于 2014.12.02 13:49 提问

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

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

10个回答

oyljerry
oyljerry   Ds   Rxr 2014.12.02 15:35
  1. 一个是语义上的,NULL用来表示空指针,而0是数字的概念,分别开来,从语法上好理解和区分,防止混淆
  2. 防止隐式转换,比如该是指针的地方,却用了数字,该是数字的地方却用了指针。
  3. 所以在C++11中,引入了nullptr的关键字来代替NULL,它就不是数字0了
caozhy
caozhy   Ds   Rxr 2014.12.03 03:50

有一些细节问题,比如
if (p = 0)
由于将==写成了=,结果将p设置为野指针了

再比如 **p 被误写作 *p,这种错误很难发现。

91program
91program   Ds   Rxr 2014.12.02 16:56

定义 NULL 只是为了方便代码的阅读,NULL 本身就是 0

wwwspider001
wwwspider001   2014.12.02 17:41

除了看起来不一样,其他都一样

mmzmagic
mmzmagic   2014.12.02 22:21

指针就是计算机内存地址,也就是整形。 0即空指针,没啥隐患。

bensnake
bensnake   2014.12.04 09:16

1楼和2楼的同学已经给出了答案,同意。

nanjian011
nanjian011   2014.12.10 15:44

NULL这是0,本身没什么问题,只是你做逻辑判断的时候容易出错,最好用nullptr,代替。
#define NULL 0
int a=NULL; 没问题,如果写成int a=nullptr, 就不行了,所以防止出错。

lm_whales
lm_whales   Rxr 2015.09.23 13:12

C中本来指针就 不能算整数,只是可以用整数表示

C++ 干脆用 0 表示 NULL指针;
这样遇到 函数重载 参数分别是 整数和指针 的时候,
传入NULL指针,
容易出现二义性错误
这是个很麻烦,但是有很少遇到的特性
一旦出现,就会很麻烦
nullptr 则不会
所以有编译器定义了nullptr,标准也采用了
此前有些书籍,也讨论过这个问题.

fmoalm
fmoalm   2015.11.30 15:12

路过水一贴,O(∩_∩)O。

zhongxinghuawei
zhongxinghuawei   2017.11.29 20:37

这个避免还得自己写代码时注意吧?!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!