一.NULL在C/C++中的标准定义

(1)NULL不是C语言关键字,本质上是一个宏定义

(2)NULL的标准定义:

#ifdef _cplusplus                      // 条件编译

#define NULL 0

#else

#define NULL (void *)0            // 这里对应C语言的情况

#endif

解释:C++的编译环境中,编译器预先定义了一个宏_cplusplus,程序中可以用条件 编译来判断当前的编译环境是C++的还是C的。

NULL的本质解析:NULL的本质是0,但是这个0不是当一个数字解析,而是当一个内存地址来解析的,这个0其实是0x00000000,代表内存的0地址。(void *)0这个整体表达式表示一个指针,这个指针变量本身占4字节,地址在哪里取决于指针变量本身,但是这个指针变量的值是0,也就是说这个指针变量指向0地址(实际是0地址开始的一段内存)。

二.从指针角度理解NULL的本质

(1)int *p;          //p是一个函数内的局部变量,则p的值是随机的,也就是说p是一个野指针。

(2)int *p = NULL;     // p是一个局部变量,分配在栈上的地址是由编译器决定的,我们不必关心,但是p的值是(void *)0,实际就是0,意思是指针p指向内存的0地址处。这时候p就不是野指针了。

(3)为什么要让一个野指针指向内存地址0处?主要是因为在大部分的CPU中,内存的0地址处都不是可以随便访问的(一般都是操作系统严密管控区域,所以应用程序不能随便访问)。所以野指针指向了这个区域可以保证野指针不会造成误伤。如果程序无意识的解引用指向0地址处的野指针则会触发段错误。这样就可以提示你帮助你找到程序中的错误。

三.为什么需要NULL

(1)第一个作用就是让野指针指向0地址处安全。

(2)第二个作用就是一个特殊标记。按照标准的指针使用步骤是:

int *p = NULL;         // 定义p时立即初始化为NULL

p = xx;

if (NULL != p)

{

*p                           // 在确认p不等于NULL的情况下才去解引用p

}

p = NULL                  //用完之后p再次等于NULL

注意:一般比较一个指针和NULL是否相等不写成if (p == NULL),而写成if (NULL == p)。原因是第一种写法中如果不小心把==写成了=,则编译器不会报错,但是程序的意思完全不一样了;而第二种写法如果不小心把==写成了=则编译器会发现并报错。

注意不要混用NULL与'\0'

(1)'\0' 和 '0' 和 0  和 NULL几个区分开。

(2)'\0'是一个转义字符,他对应的ASCII编码值是0,本质就是0

(3)'0'是一个字符,他对应的ASCII编码值是48,本质是48

(4)0是一个数字,他就是0,本质就是0

(4)NULL是一个表达式,是强制类型转换为void *类型的0,本质是0.

总结:'\0'用法是C语言字符串的结尾标志,一般用来比较字符串中的字符以判断字符串有没有到头;'0'是字符0,对应0这个字符的ASCII编码,一般用来获取0的ASCII码值;0是数字,一般用来比较一个int类型的数字是否等于0;NULL是一个表达式,一般用来比较指针是否是一个野指针

C语言的一些“小动作”:

(1)高级语言中有一些元素是机器中没有的

(2)高级语言在运算中允许我们大跨度的运算。意思就是低级语言中需要好几步才能完成的一个运算,在高级语言中只要一步即可完成。譬如C语言中一个变量i要加1,在C中只需要i++即可,看起来只有一句代码。但实际上翻译到汇编阶段需要3步才能完成:第1步从内存中读取i到寄存器,第2步对寄存器中的i进行加1,第3步将加1后的i写回内存中的i。

c语言中的Null语句作用,null什么意思(c语言中的NULL是什么意思)相关推荐

  1. 在java中null的作用_在java中避免使用!= null有什么好处?

    使用空集合或"空白"操作而不是null的主要优点是,大多数情况下,此类对象仍然可以在代码中工作而无需进一步修改.从本质上来说,空值更容易出错. 请使用以下代码,例如: String ...

  2. c语言while函数作用,详解C语言中的while语句

    什么是C语言的while语句?它的作用是什么呢?估计很多初学者对此都是一知半解.下面课课家笔者就为大家详细解释C语言中的while语句的含义和作用. 首先笔者先给大家介绍C语言中的共有的三大常用的程序 ...

  3. c语言数组中逗号的作用,在C语言中,每个语句和数据定义是用( )结束。? 逗号|括号|分号|句号...

    在C语言中,每个语句和数据定义是用( )结束.? 逗号|括号|分号|句号 更多相关问题 [多选题]有关商事登记的内容,下列表述哪些是不正确的: A. 商事登记不是取得商人资格的必备条件 B. 商事登记 ...

  4. C语言switch中break的作用,C语言中switch...case语句中break的重要性

    在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...

  5. c语言中do有什么作用,C语言中do while语句的用法是什么?_后端开发

    c语言有且唯一的函数是什么?_后端开发 在​c语言中有且唯一的函数是:"main"函数."main"函数,又称主函数,是程序执行的起点:如果有其他函数,则会完成 ...

  6. c语言中null未声明,错误:此范围内未声明“NULL”(示例代码)

    我在gcc 4.3上编译C ++时收到此消息 error: 'NULL' was not declared in this scope 它出现并消失,我不知道为什么.为什么? 谢谢. 答案 NULL不 ...

  7. mysql null的作用_MySQL中对于NULL值的理解和使用教程

    NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西.不是这样的!例如,下列语句是完全不同的: ?12mysql>INSERT INTO my ...

  8. Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句

    Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...

  9. c语言中的if语句_If ... C中的其他语句解释

    c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...

最新文章

  1. 解题报告:luogu P3916 图的遍历( 缩点 + DFS ? × 思维 + 反向建边 + DFS √ )
  2. jQuery用于请求服务器的函数
  3. ​HealthKit开发快速入门教程大学霸内部教程
  4. 安装linux 选择安装包,安装CentOS如何最小化选择安装软件包组
  5. opengl加载显示3D模型X类型文件
  6. nginx lua调用redis和mongo
  7. mysql null的作用_MySQL中对于NULL值的理解和使用教程
  8. java什么时候新建进程_创建名为“ {java}”的线程(即轻量级进程)是为了什么?...
  9. spring-boot 定时任务
  10. while的用法和格式描述符
  11. php的弹出窗口,弹出窗口 PHP
  12. jQuery 的 ajax
  13. 给定一个序列,判断该序列是否为二叉树查找树的后序遍历序列
  14. 送给队友的一个汉堡包
  15. Echarts教程篇:概览
  16. 在 WindowMobile 上的模拟LED 显示屏插件(转)
  17. MySql主键和唯一索引的区别
  18. 知其然就够了——大数据时代的思考之一
  19. X4扭曲字体或图形 coreldraw_CorelDRAWX4SP2简体中文正式版精简增强版
  20. 关于Spring Boot报错:LoggerFactory is not a Logback LoggerContext but Logback is on the classpath

热门文章

  1. html输入框为什么不能粘贴,移动端input框type为number仍可以输入和粘贴【中文】的问题...
  2. 【毕业设计】 python flas疫情爬虫可视化
  3. 服务器型号T400,联想万全服务器T400-1002服务器上安装操作系统.doc
  4. HDFS多rack分布的block placement policy设计实现
  5. 再造商业,传统购物中心的数字化未来
  6. 【技术】uniapp 之 在线选座 demo
  7. 计算机专业专攻一个方向好,还是均有所涉猎?学习方式的该如何选择!
  8. python progressbar2_python progressbar2 使用
  9. Github标星25K+超火的Java实战项目
  10. 苹果6怎么显示itunes store无法连接服务器,iphone无法连接到itunesstore怎么办-互盾苹果恢复精灵...