关于空指针

空指针是什么

c中空意味着它与任何对象与函数的指针值都不相等也就是说我们并不能通过&来得到空地址(其实这在数学逻辑上是矛盾的,但是我们暂且这么认为)

所以空指针在概念上不同于未初始化的指针,因为未初始化的指针可以指向任何地方。

每种指针类型都有其空指针,不同空指针的内部表示也不尽相同,尽管程序员并不知道内部值。编译器知道就行了。

怎样获得一个空指针
根据定义,在指针上下文的常数0会在编译时转换为空指针。也就是说,在初始化的赋值或比较的时候,如果一边是指针类型的值或者表达式,编译器可以确定右侧的零为空指针值。也就有了
char *p = 0;
以上代码合法
但是,传入函数的参数不一定会被当作指针环境,因而编译器可能不能识别未加修饰的0,在函数中调用上下文中需要明确的类型转换。
在unix中 需要  (char *)0这样写才合法(许多unix手册在调用excel()上都错了)。
另外提一句if(p)这种形式并没有什么不必要的争论,编译器都会把它当作if(p!=0).

NULL是什么
null不过是头文件用宏定义的一个空指针常量。
还有null只能用于指针常数。



我还是要插一嘴,有人问null定义成#define null ((char *)0)不就可以想函数传入不加转换的null了么。(md你脑洞怎么这么多)
显然这样是不行滴,有的机器对于空有不同数据类型的定义,这样定义对于字符是没有问题的
FILE *fp = null则会失败
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值