用C语言编程不能不说指针,说道指针又不能不提NULL,那么NULL究竟是个什么东西呢? C语言中又定义,定义如下:

#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif

所以我觉得,如果一个指针被赋予NULL,应该就相当于这个指针执行了0x0000这个逻辑地址,但是C语言中0x0000这个逻辑地址用户是不能使用的(有些人说是因为0x0000没有映射到物理地址,也有人说是因为0x0000映射到的地址是操作系统用于判断野指针的,我也不太懂,总之就是用户不能使用啦),所以当你试图取一个指向了NULL的指针的内容时,就会提示段错误,听着有点绕,看程序:

int *node=NULL;
int a=0;
a=*node;

printf("%d\n",a);

由于node执行的是NULL,也就是逻辑地址0x0000,而这个地址用于是不能访问的,所以编译器提示段错误。

还在网上看到了一个面试题,和这个问题有关,分享一下:

#include <stdio.h>void fun(int *node)
{static int N=100;node=&N;
}
int main()
{int *node=NULL;int a=0;fun(node);a=*node;printf("%d\n",a);return 0;}

运行结果依然是段错误。因为函数是值传递,node指针变量的值并没有被改变,所以这个程序的效果和上一个程序的效果是一样的。

如果要让结果为100,应该怎样写代码呢? 答案是 传递node指针变量的指针给fun,也就是传递一个二级指针,当然相应的fun函数也应该做出改变,代码如下:

#include <stdio.h>void fun(int ** node)
{static int N=100;*node=&N;
}int main()
{int *node=NULL;int a=0;fun(&node);a=*node;printf("%d\n",a);return 0;}

就写到这里,希望对大家有帮助。不对的地方还请指正。谢谢~~~

转载于:https://www.cnblogs.com/qingergege/p/6494751.html

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 和NULL的区别 %p和%x的区别 在dvc++运行

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

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

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

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

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

  5. c语言中“函数的定义不可以嵌套,但函数的调用可以嵌套

    楼上正解,可能楼主没理解 我这里具体举例说明不能嵌套定义 即是function a(){ function b(){ }}在a函数里面定义b函数是错的,只能在a函数外部定义b函数 像这样functio ...

  6. html语言中form是定义什么,htmlfrom的含义以及form的用法

    htmlfrom的含义以及form的用法 在HTML中,from代表的意思是表单.那么大家知道htmlfrom的含义以及form的用法是什么呢?下面一起来看看! from是什么意思? 1.表单是一个包 ...

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

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

  8. 单片机c语言中sbuf的定义,SBUF的详细介绍!(51单片机)

    满意答案 dianzicidian3 推荐于 2018.02.23 SBUF---即串口数据缓冲寄存器 MCS-51串行口有两个在物理上独立的串行数据缓冲寄存器SBUF, 这两个缓冲寄存器共用一个地址 ...

  9. c语言不用math就算次方,C语言中math.h定义了哪些函数

    //1.三角函数 double sin(double); //1.1.正弦 double cos(double); //1.2.余弦 double tan(double); //1. 3.正切 //2 ...

最新文章

  1. PHP上传文件大小限制问题 post_max_size对大小的影响及解决方法
  2. Windows Phone 7应用之Tencent微博——封装API[上篇]
  3. python多个进度条_多个芹菜进度条
  4. php骑手轨迹_用python模拟美团外卖骑手推送请求
  5. 每日冲刺报告——Day2(Java-Team)
  6. post 传递参数中包含 html 代码解决办法,js加密,.net解密
  7. 你离黑客的距离,就差这 20 个神器了 | 原力计划
  8. android真实项目教程(二)——漫画App初构_by_CJJ
  9. linux 系统频率,Linux下CPU的手动频率设定
  10. Framebuffer基础知识(三十)
  11. 计算机网络学习笔记——操作
  12. Matlab模拟液压缸运动,基于MATLAB-simulink的液压系统动态仿真(1).pptx
  13. Python实现百度地图、高德地图地理编码及高德地图经纬度坐标转百度地图经纬度坐标
  14. 安卓搞机教程--修改设置里 添加选项 添加文字 修改图标 修改版本号等等 实例解析
  15. [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
  16. 大学生英语跨文化交际阅读课程 Unit6 Text A
  17. WordPress增加网站地图
  18. 怎么用超级文档免费制作调查问卷
  19. 用JSP构建三层管理信息系统
  20. [RK3399][Android7.1] 调试笔记 --- 解决开关按键时产生的Pop声

热门文章

  1. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
  2. 基于SSM的传智健康系统功能演示(SSM+Dubbo+SpringSecurity+Zookeeper)
  3. java中的WeakReference(弱引用)
  4. [答疑]面向飞机维修业务的PDM项目业务建模
  5. wp-启动内置应用Uri
  6. 以太网PHY接口:MII RMII GMII RGMII SGMII
  7. 微软iscsi服务器,HOWTO: 基于 Windows Server iSCSI 服务创建 RAM Disk
  8. ctf内存取证----easy_dump
  9. Oracle主库redo传输至备机,oracle物理DG管理-redo数据传输,应用与三种模式
  10. java象棋游戏用户特点_基于Java Swing的《中国象棋》游戏的设计与实现