龙空技术网

C语言中NULL

潜在水中 87

前言:

而今同学们对“c语言null是什么”大致比较关切,小伙伴们都需要了解一些“c语言null是什么”的相关内容。那么小编在网络上汇集了一些对于“c语言null是什么””的相关知识,希望同学们能喜欢,我们一起来学习一下吧!

写程序中,经常会用到NULL,但是一直只知道拿它来作为空指针判断,但是它是怎么来?有没有什么细节要注意?一直没有关心过,正好今天有工夫,那就花点时间查查资料,来总结总结。

1、看一下C语言之父的经典之作《C程序设计语言》中是怎么描述的:

指针与整数之间不能相互转换,但0是唯一的例外:常量0可以赋值给指针,指针也可以和常量0进行比较。程序中经常用符号常量NULL代替常量0,这样便于更清晰地说明常量0是指针的一个特殊值。

2、在另外一本《C语言程序设计_现代方法》有对NULL更详细描述,如下:

空指针是不指向任何地方的指针,这是一个区别于所有有效指针的特殊值 。空指针用名为NULL的宏来表示,名为NULL的宏在6个头<locale.h>、<stddef.h>、<stdio.h>、<stdlib.h>、<string.h>和<time.h>都有定义。C99的<wchar.h>也定义了NULL。在使用的时候只要包含其中任意一个就行了。但是我实际在自己电脑上测了一下,只有<stddef.h>有定义。

NULL实际表示0。当在要求指针的地方使用0时,C语言编译器会把它看成是空指针而不是整数0 。是供宏NULL只是为了避免混淆。赋值表达式 p = NULL;可以让人更明白p是指针。

把NULL定义为0一样,这种定义是C语言早期时代的延续,那时的指针和整数彼此兼容。但是,就大多数目的而言,NULL究竟如何定义并不重要,把它想成是空指针的名字就可以了。

每个C语言编译器都被允许用不同的方式来表示空指针,而且不是所有编译器都使用零地址的。一些编译器为空指针使用不存在的内存地址,这样硬件可以检查出试图通过空指针访问内存的方式。我们不关心如何在计算机内存储空指针,那是编译器专家关注的细节。重要的是,当0作为指针使用时,编译器会把它转换为适当的内部形式。

3、总结

经过以上两本书的介绍,得出一句话,要使用空指针的时候 ,使用NULL,NULL是空指针代表。假如把0赋值给指针了,这时编译器会把它看成是空指针。空指针只能给指针类型变量使用。每个编译器内部会用不同的方式来表示空指针,这个我们应用程序员不需要关心。

标签: #c语言null是什么 #c语言null用法 #c语言null的值 #c语言null的值为什么0吗