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