0,‘0’,‘\0’,null的区别

本文详细解释了C语言中0、''、null和'0'之间的区别,包括它们的类型、ASCII码值以及在内存中的表现形式。特别强调了NULL在指针初始化中的作用,以及如何正确比较指针与NULL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0:int型,表示数字0,ASCII码值为0;

’\0’:char型,表示一个字符串结束的标志,不会显示,也不会单独存在,ASCII码值为0;

null:表示空,一般代表0地址,ASCII码值为0 ;

’0’:char类型,表示字符的内容为0,ASCII码值为48。

从内存的角度看它们的区别:

在计算机内存中,0、’\0’、null是一样的,值都是0。以数字的方式读取就是0,以字符的方式读取就是’\0’,以某些其他方式读取就是null(比如指针,null的定义跟编译器有关,有的编译器定义null可能不是0);而’0’在内存中的值是48,以字符读取就是’0’,以数字读取就是48。

c语言中的NULL:

c语言中NULL的本质是0,但是这个0不是当一个数字来解析,而是当一个内存地址来解析的,这个0其实是0x00000000,代表内存的0地址。

我们经常会定义 int *p = NULL 来初始化防止野指针,但是为什么要让一个野指针指向内存0地址处呢

主要是因为在大部分的CPU中,内存的0地址处都不是可以随便访问的,一般都是操作系统严密管控区域,所以应用程序不能随便访问,所以野指针指向了这个区域可以保证野指针不会造成误伤,如果程序无意识地解引用,指向0地址处的野指针则会出发段错误,这样就可以提示你找出程序中的错误。

一般比较一个指针和NULL是否相等不要写成 if ( p ==NULL),而写成 if ( NULL == p ),原因是第一种写法中如果不小心把双等号 == 写成单等号 = ,则编译器不会报错,但是程序的意思完全不一样了;而第二种写法如果不小心把双等号 == 写成了单等号 = ,则编译器会发现并报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellosc01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值