C语言 | 每日基础(23)

Posted C语言入门到精通

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 | 每日基础(23)相关的知识,希望对你有一定的参考价值。



古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:如果 NULL 定义成 #define NULL ((char *)0) 难道不就可以向 函数传入不加转换的 NULL 了吗?


阿一:一般情况下不行。复杂之处在于, 有的机器不同类型数据的指针有不同的内 部表达。这样的 NULL 定义对于接受字符指针的的函数没有问题, 但对于其它类 型的指针参数仍然有问题 (在缺少原型的情况下), 而合法的构造如 FILE *fp = NULL; 则会失败。 


不过, ANSI C 允许 NULL 的可选定义 #define NULL ((void *)0) 除了潜在地帮助错误程序运行 (仅限于使用同样类型指针的机器, 因此帮助有 限) 以外, 这样的定义还可以发现错误使用 NULL 的程序。


读者:如果 NULL 的值改变了, 比如在使用非零内部空指针的机器上, 难道用 NULL不是更好吗?


阿一:不是的, 尽管符号常量经常代替数字使 用以备数字的改变, 但这不是用 NULL 代替 0 的原因。语言本身确保了源码中的 0 会生成空指针。NULL 只是用作一种格式习惯。























有时候,正是那些意想不到之人,成就了无人能成之事。
——图灵


小编二维码

长按/加好友

-  END -


____

______

________

____

______

________

以上是关于C语言 | 每日基础(23)的主要内容,如果未能解决你的问题,请参考以下文章

C语言 | 每日基础

C语言 | 每日基础

C语言 | 每日基础(61)

C语言 | 每日基础

C语言 | 每日基础

C语言 | 每日基础(31)