C语言中NULL的定义
用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的定义相关推荐
- c+语言+null,C/C++语言中NULL、'\0’和0的区别
NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...
- c语言中 null 和NULL的区别 %p和%x的区别 在dvc++运行
#include <cstddef> #include<stdio.h> int main() {int *p;/*c语言和c++对大小写是敏感的,也就是说null和NULL是 ...
- 历史上的今天:编程语言中null引用的十亿美元错误
这是Jerry 2021年的第 10 篇文章,也是汪子熙公众号总共第 281 篇原创文章. 今天是2021年1月17日,星期日,腊月初五. Jerry之前收到CSDN社区赠送的新年礼物,一本台历:&l ...
- c语言中null未声明,错误:此范围内未声明“NULL”(示例代码)
我在gcc 4.3上编译C ++时收到此消息 error: 'NULL' was not declared in this scope 它出现并消失,我不知道为什么.为什么? 谢谢. 答案 NULL不 ...
- c语言中“函数的定义不可以嵌套,但函数的调用可以嵌套
楼上正解,可能楼主没理解 我这里具体举例说明不能嵌套定义 即是function a(){ function b(){ }}在a函数里面定义b函数是错的,只能在a函数外部定义b函数 像这样functio ...
- html语言中form是定义什么,htmlfrom的含义以及form的用法
htmlfrom的含义以及form的用法 在HTML中,from代表的意思是表单.那么大家知道htmlfrom的含义以及form的用法是什么呢?下面一起来看看! from是什么意思? 1.表单是一个包 ...
- c语言中null和空格的区别,空字符串(“”)和null和空格字符串( )的区别
null表示的是一个对象的值,而并不是一个字符串. 例如声明一个对象的引用,String a = null ; ""表示的是一个空字符串,也就是说它的长度为0,但它是一个字符串. ...
- 单片机c语言中sbuf的定义,SBUF的详细介绍!(51单片机)
满意答案 dianzicidian3 推荐于 2018.02.23 SBUF---即串口数据缓冲寄存器 MCS-51串行口有两个在物理上独立的串行数据缓冲寄存器SBUF, 这两个缓冲寄存器共用一个地址 ...
- c语言不用math就算次方,C语言中math.h定义了哪些函数
//1.三角函数 double sin(double); //1.1.正弦 double cos(double); //1.2.余弦 double tan(double); //1. 3.正切 //2 ...
最新文章
- PHP上传文件大小限制问题 post_max_size对大小的影响及解决方法
- Windows Phone 7应用之Tencent微博——封装API[上篇]
- python多个进度条_多个芹菜进度条
- php骑手轨迹_用python模拟美团外卖骑手推送请求
- 每日冲刺报告——Day2(Java-Team)
- post 传递参数中包含 html 代码解决办法,js加密,.net解密
- 你离黑客的距离,就差这 20 个神器了 | 原力计划
- android真实项目教程(二)——漫画App初构_by_CJJ
- linux 系统频率,Linux下CPU的手动频率设定
- Framebuffer基础知识(三十)
- 计算机网络学习笔记——操作
- Matlab模拟液压缸运动,基于MATLAB-simulink的液压系统动态仿真(1).pptx
- Python实现百度地图、高德地图地理编码及高德地图经纬度坐标转百度地图经纬度坐标
- 安卓搞机教程--修改设置里 添加选项 添加文字 修改图标 修改版本号等等 实例解析
- [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
- 大学生英语跨文化交际阅读课程 Unit6 Text A
- WordPress增加网站地图
- 怎么用超级文档免费制作调查问卷
- 用JSP构建三层管理信息系统
- [RK3399][Android7.1] 调试笔记 --- 解决开关按键时产生的Pop声
热门文章
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
- 基于SSM的传智健康系统功能演示(SSM+Dubbo+SpringSecurity+Zookeeper)
- java中的WeakReference(弱引用)
- [答疑]面向飞机维修业务的PDM项目业务建模
- wp-启动内置应用Uri
- 以太网PHY接口:MII RMII GMII RGMII SGMII
- 微软iscsi服务器,HOWTO: 基于 Windows Server iSCSI 服务创建 RAM Disk
- ctf内存取证----easy_dump
- Oracle主库redo传输至备机,oracle物理DG管理-redo数据传输,应用与三种模式
- java象棋游戏用户特点_基于Java Swing的《中国象棋》游戏的设计与实现