如何理解空指针的使用

如何理解空指针的使用

* 来源: * 作者: * 发表时间: 2020-12-07 5:23:11 * 浏览: 0

问题:本人在一本书上看到一句话,有两条简单规则你必须遵循:
1.当你在源码中需要空指针常数时,用“0”或“NULL”。
2.如果在函数调用中“0”或“NULL”用作参数,把它转换成被调函数需要的指针类型
请问第两条是什么意思?


回答:对于第一条,很容易理解,在指针的上下文中,0对于编译器来说就是空指针,但是有些人不喜欢在代码中出现0这个看起来类似magic number的数值,所以有了NULL,两者对于编译器来说是一样的,即使在某些平台下空指针不是全0地址,也可以用if(p == 0)来判断,编译器会保证正确。对于第二条,我在上面上一段说了“在指针的上下文中,0对于编译器来说就是空指针”,但是在函数调用中,由于不是指针上下文,编译器可能不能识别用0来表示的空指针,通常好的编程规范要求在函数调用的上下文中为生成空指针进行明确的强制类型转换,以迫使编译器把0当作空指针,否则编译器可能将其当作常数0,这在我们熟悉的x86平台下最多只是遇到一个编译时的警告,但是在某些平台上空指针不是全0地址,那就出问题了。最后祝大家好运。