c/c++编程学习:空指针是什么?

259 篇文章 60 订阅

什么是空指针?

对于每一种指针类型,都有一个特殊的值——空指针,空指针与其他所有指针值区分开来,保证其不会指向任何函数或者对象等有意义的数据。因此,取地址运算符 & 永远不会产生空指针,malloc() 函数成功时永远不会返回空指针。

C语言中空指针在概念上不同于未初始化的指针,因为空指针不指向任何函数或对象,而未初始化的指针指向是不确定的,它可能指向任何位置,所以未初始化的指针只是有可能是空指针。

C语言中的空指针其实就是一个有特殊值的指针。不同类型的空指针值可能不同(尽管很多平台都将空指针值设为 0),C语言程序员应该明白这一点。

既然C语言空指针可能不为0,那么判断指针是否空指针,缩写成 if(p) 还安全吗?

当然是安全的。C语言需要做布尔判断时,可以使用if(expr) 语句,如果表达式 expr 非零则表示得到真值,否则将得到假值。也就是说,如果程序员写出:

if(p)

C语言编译器其实会将其当作下面这样的语句处理:

if(p !=0)

读者可能会有疑问:上面不是说C语言中的空指针可能不是 0 吗?这种情况下,if(p!=0) 不就没有办法判断 p 究竟是不是空指针了吗?

事实上,C语言编译器在处理代码时会考虑代码的上下文,if(p!=0)中的 p 如果是指针,那么编译器其实会将(implicit)0 替换成 p 所属类型的空指针。所以不必担心空指针非零会导致if(p)判断出错的情况。


自学C/C++编程难度很大,如果你想更快提升自己的编程能力和编写项目的水平,欢迎一起共同成长!

UP在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~

分享(源码、项目实战视频、项目笔记,基础入门教程)

免费学习:

   免费学习:

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值