当前位置:首页 > 杂谈 > 正文内容

NULL,0,'\0',“0”,"\0"你真的分得清吗?(null等于null)

2023-08-02 19:51:14TONY杂谈79

前言

NULL,0,'\0',“0”,"\0"你真的分得清吗?(null等于null)

在C语言中,我们有时候看到NULL,有时候也看到\0,那它们之间有什么区别呢?

本质

本质来说,NULL,0,\0都是一样的,都是值0。是的,你没有听错。说到这本文差不多应该结束了。不过为了不被打,还是继续说一说。它们虽然值都是0,但是含义却是不一样的。

NULL

虽然值是0,但是它的含义不一样,或者说它的类型不一样。NULL是指针类型,不过它是空指针,即值为0。

//来源:公众号【编程珠玑】 博客:https://www.yanbinghu.com //null.c #include<stdio.h> int main(void) { int a = NULL; printf("%p\n",a); return 0; }

我们编译它:

$ gcc -o null null.c null.c: In function ‘main’: null.c:14:10: warning: initialization makes integer from pointer without a cast [-Wint-conversion] int a = NULL; ^

它给了我们一个警告,提示尝试将指针转换为整数。这也就正验证了我们前面的说法。

实际上NULL通常是如下定义:

#define NULL (void*)0

所以,如果要给一个指针类型初始化,那么你给它一个NULL,使得能够明显的看到这是一个指正。

当然,在C++中,你更应该使用nullptr,而不是NULL。

\0

我们都知道\是转义符,用单引号包起来,再加转义,实际上就是0,只不过它表示的是字符。就向下面这样:

//来源:公众号【编程珠玑】 博客:https://www.yanbinghu.com //nul.c #include<stdio.h> int main(void) { char a = \0; char b = 0; printf("a = %d,b = %d\n",a,b); return 0; }

编译运行:

$ gcc -o nul nul.c ./nul a = 0,b = 48

我们最常见到的就是它作为字符串的结束符。所以我们常常会看到下面这样的写法:

char str[16]; /*do something*/ str[15] = \0;

还记得printf是如何打印字符串,以及strcmp比较停止规则吗?是的,它们都以遇到\0结束。

注意,它和0完全不一样。通过打印就可以看到了,实际上\0的值就是0。

需要特别注意的是,如果\0的0后面跟八进制的数,则会被转义。所以\60与0的值一致。

0

这个不用多解释。

int a = 0;

>微信公众号【编程珠玑】:专注但不限于分享计算机编程基础,Linux,C语言,C++,数据结构与算法,工具,资源等编程相关[原创]技术文章。

原文地址:

https://www.yanbinghu.com/2019/09/19/18180.html

"0"

用双引号包裹的0是字符串,我们看不到的是它结尾还有一个’\0‘

#include<stdio.h> int main(void) { char str[] = "0"; printf("sizeof str is %d,string len is %d\n",sizeof(str),strlen(str)); return 0; }

运行结果:

sizeof str is 2,string len is 1

"\0"

这也是字符串,只不过是两个空字符。使用strlen计算字符串长度为0。

" "

字符串。字符串长度为1,占用空间2字节,是一个空格加空字符。

总结

到这里你应该明白了,它们的值可能一样,但赋予的含义却不一样,为了代码良好的可读性,你应该在恰当的时候使用合适的值。

关注公众号【编程珠玑】,第一时间获取更多原创技术文章

“NULL,0,'\0',“0”,"\0"你真的分得清吗?(null等于null)” 的相关文章

58同城“移动经纪人”升级适用多类智能手环 助经纪人高效服务

58同城“移动经纪人”升级适用多类智能手环 助经纪人高效服务

房产服务线上化转移加强了经纪人对于智能手机的依赖,然而在线下带看中,出现了无法及时查看手机导致错过来自线上的用户消息和微聊信息等,以及各类软件消息众多导致找房用户信息被淹没等各类影响用户体验的问题。 近日,58同城、安居客升级经纪人作业工具“移动经纪人”即时信息互动功能,目前已适配...

比Scholarscope功能更强大,这款插件与PubMed是绝配

比Scholarscope功能更强大,这款插件与PubMed是绝配

今天在逛浏览器扩展插件等网站时,发现一个不错的浏览器插件——EasyPubMed插件。看名字就可以猜到,这个插件跟PubMed有关。我看了下插件功能介绍,发现这个插件功能超级强大,简直可以称为PubMed最强插件。下面我们看看这个插件到底有哪些功能?1. 安装插件首先我们先来安装下这个插件。在安装之...

2月70城房价出炉!上海房价涨了

2月70城房价出炉!上海房价涨了

今日看点 3月16日,国家统计局发布2月份70个大中城市商品住宅销售价格变动情况:从新房来看,21城价格环比上涨,成都涨幅1.2%领跑,上海持平;从二手房来看,销售价格环比上涨0.2%,上海和深圳分别上涨0.2%和0.5%。 若你有好的观点,欢迎一起来讨论! 70个...

2022年 分享10个好用的网络云盘

2022年 分享10个好用的网络云盘

1.百度网盘(https://pan.baidu.com/) 百度网盘曾叫百度云盘。百度网盘是的一款云服务产品。百度网盘客户端为您提供网上存储空间,你可以在百度网盘中存储手机中的照片,视频,软件备份等,软件操作简单,只需要您拖拽就可以上传到网盘了。百度网盘是由百度公司出品的一款云...

《剑网3》五款精美盒子盘点,剑歌惊月最豪华,狄仁杰最干练

《剑网3》五款精美盒子盘点,剑歌惊月最豪华,狄仁杰最干练

大家都知道,《剑网3》九周年发布了两款盒子,看起来都非常精美。一款是浮屠明音,另外一款是碧翎叠云。这款浮屠明音采取水墨色为主色调,搭配黑白色的念珠,采用了睡莲、松柏、寒梅等设计元素,看起来古韵十足。礼盒内含套装披风一件、套装肩饰两个以及套装外装一件。...

剑网三近期外观盒子调整,策划亲自上阵,求生欲强主要为带货

剑网三近期外观盒子调整,策划亲自上阵,求生欲强主要为带货

每到节假日剑网三都会推出大大小小的活动庆祝一番,那么,就快到了一年一度的中秋节了,官方在这几天则爆料了许多新外观,中秋盒子,二胡盒子和复刻外观等,神奇的是,官博在放出新外观盒子的消息之后居然没有对新外观多做解释,而是对新外观的布料和细节进行讲解,这是何意? 其实是这次中秋...