用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. stella forum v1.2 用例分析
  2. linux .sh文件 命令如何写,Linux下面使用命令如何运行.sh文件的两种解决办法
  3. cocos2d-x游戏实例(26)-简易动作游戏(4)
  4. Python3--unitest框架的使用
  5. UIWindow的windowLevel详解
  6. 为了梦想开始历练之清除浮动篇
  7. 搜狗高速浏览器怎么设置页面字体 设置方法介绍
  8. oracle的.aud文件,Oracle 11g 在audit_file_dest目录下产生大量的aud文件
  9. shell 日期格式化输出
  10. UVa 10870 - Recurrences 矩阵快速幂
  11. UBUNTU安装EMQ
  12. python破解excel进入密码(密码字典)
  13. 基于OpenCv的人脸识别(Python完整代码)
  14. 免费开源BI工具DataEase实现了SQL数据集动态传参?冲冲冲!!!
  15. golang 微信商户平台支付平台V3
  16. 魅族7.0系统最简单激活Xposed框架的经验
  17. 华为网络---静态路由
  18. r语言中的多因素方差分析_R中的因素
  19. swap函数 交换 vector 里面的两个元素
  20. 利用pandas实现json文件转化成csv文件

热门文章

  1. 数据库导出数据模型图
  2. 使用vue-grid-layout完成桌面拖拽布局功能(实现两个元素互换位置)
  3. Loadrunner12录制脚本之飞机订票系统
  4. 就「苏宁10.12广工龙洞校招会」歧视广工甚至所有非985/211学子有感
  5. 家居装修要健康,八类禁忌需注意
  6. MySql数据库主从配置详细教程
  7. 线性相位重要性的理解
  8. iOS实战之调起QQ加群页和临时会话页
  9. foreach的用法
  10. 在c语言中阿储存形式,c语言学习与阿复习课件2.ppt