C语言中NULL到底是什么?

1.NULL在C/C++中定义为:
#ifdef _cplusplus // 定义这个符号就表示当前是C++环境
#define NULL 0 // 在C++中NULL就是0
#else
#define NULL (void *)0 // 在C中NULL是强制类型转换为void *的0
#endif
2.由上可知,在C和C++中NULL是略有差异的,在C++中NULL就是数字0,在C中NULL是个指针变量,指向地址0。在C语言中,int *p;你可以p = (int *)0;但是不可以p = 0;因为类型不相同。

NULL有什么作用?

1.C语言的精髓是指针,指针是可以指向内存地址,程序员可以直接读写内存,好处是效率高,坏处是如果访问的内存是不该访问的内存地址,就会造成段错误或者非法修改数据导致程序运行异常。所以在C语言中,对指针变量的引用要谨慎。
2.当我们定义一个局部指针变量时,因为临时变量都是从栈申请的,变量的初值都是随机的,导致刚申请的指针变量指向的内存地址是不可预知的。至于为什么临时变量申请的初值是随机的,可以参考另一篇博客
《C语言与堆栈的理解》。如果我们定义了一个变量而没有去初始化,直接解引用,会导致段错误或者修改了不该访问的内存地址处的数据。导致段错误已经是非常好的情况的,会生成core文件,比较容易发现;最怕的是程序没有报错,而是指针刚好指向了一个可以访问的内存地址,通过这个指针变量把一些不该修改的数据给改掉了。
3.简单来说,NULL的作用就是当一个指针变量没有被显性初始化时,将该指针变量的值赋为NULL。解引用前判断指针变量是否为NULL,如果为NULL说明该指针没有初始化过,不可解引用。

为什么要将未初始化的指针变量指向NULL?

1.首先解引用一个指向未知地址的指针变量是很危险的,由此我们需要判断一个指针变量是否已经被初始化。于是行形成一个规定,定义一个指针变量时就将其赋值为NULL,只要我们判断一个指针是NULL,就是未初始化不可解引用的。这样可以防止我们错误的解引用指针。
2.NULL是一个特殊的地址,在操作系统中定义该地址是不可以访问的,我猜测NULL也就是0地址是操作系统内核的地址,用户是不可访问的。一旦我们去解引用NULL地址,就会报段错误。报错误这已经是非常好的结果了,可以让我们及时的发现错误。

推荐

给大家推荐一款嵌入式工程师的学习神器,里面包含C语言、linux、操作系统等嵌入式工程师必备的知识点,不仅可以学习知识点还有配套的练习题、大厂面试题。博主在入门嵌入式行业时也是在这个平台学习,如果你是想入门嵌入式或者是找工作,都强烈推荐你使用这个网站。
《学习神器点这里》

c语言中NULL到底是什么?相关推荐

  1. c+语言+null,C/C++语言中NULL、'\0’和0的区别

    NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...

  2. C语言中NULL的定义

    用C语言编程不能不说指针,说道指针又不能不提NULL,那么NULL究竟是个什么东西呢? C语言中又定义,定义如下: #undef NULL #if defined(__cplusplus) #defi ...

  3. 历史上的今天:编程语言中null引用的十亿美元错误

    这是Jerry 2021年的第 10 篇文章,也是汪子熙公众号总共第 281 篇原创文章. 今天是2021年1月17日,星期日,腊月初五. Jerry之前收到CSDN社区赠送的新年礼物,一本台历:&l ...

  4. c语言中 null 和NULL的区别 %p和%x的区别 在dvc++运行

    #include <cstddef> #include<stdio.h> int main() {int *p;/*c语言和c++对大小写是敏感的,也就是说null和NULL是 ...

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

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

  6. c语言中null和空格的区别,空字符串(“”)和null和空格字符串( )的区别

    null表示的是一个对象的值,而并不是一个字符串. 例如声明一个对象的引用,String a = null ; ""表示的是一个空字符串,也就是说它的长度为0,但它是一个字符串. ...

  7. go语言中,到底nil是个什么货?

    什么是nil?go中关于nil的定义为(buildin.go中): var nil Type type Type int go定义变量时,会默认分配一个零值,如:bool->false.numb ...

  8. 编程语言中,到底什么是变量,变量的作用是什么?

    1.变量的主要作用,就是用来存储信息,然后在计算机程序中使用这些信息. 2.通过给变量赋值,也将数据与一些能够描述的名字连接起来,简单说,就是给数据一个能让人理解的名字,12可以指年龄,也可以指距离, ...

  9. c语言中.和-区别,c语言中-和.的区别

    对于c语言中"->"和"."的区别总结如下: 1.A.B则A为对象或者结构体: 2.A->B则A为指针,->是成员提取,A->B是提取A ...

  10. c语言char str什意思,C语言中,charstr的str到底表示什么?

    问题:C语言中,char str的 str到底表示什么? 描述: #include int main() { #第一处 char *pstr = "abcdef"; printf( ...

最新文章

  1. Objective C 链式调用
  2. TFS数据库变成可疑状态的处理
  3. varchar与varchar2的区别
  4. Codeforces 516D Drazil and Morning Exercise (栈、二分)
  5. C语言堆排序Heap Sort算法(附完整源码)
  6. 1009 说反话 (20 分)(c语言)
  7. SDM For Face Alignment流程介绍及Matlab代码实现之测试篇
  8. 在ubuntu上实现基于webrtc的多人在线视频聊天服务
  9. 2019年9月中国编程语言排行榜,C#排第三
  10. 一个简单的高并发的回应服务器(5万并发)
  11. 乖乖,腾讯天美研发20万月薪刷爆朋友圈,网友:小丑竟是我自己
  12. 网站移动端500错误_PC网站和移动端网站有什么差异?
  13. python编程广告_为什么铺天盖地都是Python的广告?
  14. 免费素材下载:200个超棒的矢量图标下载
  15. discard python_Python学习第三天
  16. linux终端黑绿字配色方案注意事项
  17. matlab altera视频,Altera.FPGA入门及提高视频教程
  18. 高分1、2号卫星原始遥感影像数据
  19. TI DSP处理器中CMD 文件的那些事儿
  20. 重复组合公式及其证明方法

热门文章

  1. SQL 考勤打卡问题
  2. 概率统计:离散分布和连续分布
  3. 银行电话精准营销的探索性分析并基于XGboost进行潜在客户预测建模
  4. 学生网页作业网站设计——中华美德(6页) HTML+CSS+JavaScript web大作业 静态网页
  5. 远程拨号换IP的方法
  6. adsl拨号服务器构建代理池
  7. 在计算机编程里pi是什么意思,编程中的术语“钩子”是什么意思?
  8. C语言:数组数据移动
  9. c语言两矩阵相乘算法,用c语言实现两个矩阵相乘怎么做?
  10. 明尼苏达大学Transportation Research Data Lab (TDRL)交通数据读取