你搞清楚「NULL」、「0」、「'0'」、「0」「\0」了吗?


我们先讨论NULL,平时使用指针的时候,会经常遇见这个家伙,这个家伙的值是是这样定义的

#define NULL 0
或者
#define NULL (void *)0

我们看一下下面这段代码

#include <stdio.h>int main () {size_t ii;int *ptr = NULL;unsigned long *null_value = (unsigned long *)&ptr;if (NULL == 0) {printf ("NULL == 0\n"); }printf ("NULL = 0x");for (ii = 0; ii < sizeof (ptr); ii++) {printf ("%02X", null_value[ii]); }printf ("\n");return 0;
}

程序输出

NULL == 0
NULL = 0x000061FE08000400B1138000--------------------------------
Process exited after 0.02921 seconds with return value 0
请按任意键继续. . .

我们用 &ptr 获取 ptr的地址,然后用 unsigned long * 把这个地址转换成 unsigned long *类型,之后再用 * 钥匙来打开这个地址,获取这个地址的值。只不过这里不是用 *获取,用的是数组偏移。

我们修改下代码

#include <stdio.h>int main () {size_t ii;int *ptr = NULL;unsigned long *null_value = (unsigned long *)&ptr;if (NULL == 0) {printf ("NULL == 0\n"); }printf ("NULL = 0x");for (ii = 0; ii < sizeof (ptr); ii++) {printf ("%02X", null_value[ii]); }printf ("\n");printf("0x%p 0x%p\n",ptr,&ptr);return 0;
}

程序输出

NULL == 0
NULL = 0x000061FE08000400A7138000
0x0000000000000000 0x000000000061FE08--------------------------------
Process exited after 0.03177 seconds with return value 0
请按任意键继续. . .

这样看之后,就觉得没有那么拗口了吧。

我们再讨论下 「'0'」

字符 0 和其他都不能混为一谈,它是一个字符,字符对应的是ascii 码

#include <stdio.h>int main () {char c = '0'; printf("'%c' 0x%x %d\n",c,c,c); return 0;
}

程序输出

'0' 0x30 48--------------------------------
Process exited after 0.02841 seconds with return value 0
请按任意键继续. . .

「"0"」是一个字符串,字符串跟字符的不同是,字符串在最后面有一个字符结束标识 nul

测试程序

#include <stdio.h>
#include <string.h>
int main () {char * str = "0"; int len = strlen(str);printf("%d\n",len); for(int i = 0;i< len +1;i++)printf("[0x%x]",str[i]);return 0;
}

程序输出

1
[0x30][0x0]
--------------------------------
Process exited after 0.02936 seconds with return value 0
请按任意键继续. . .

「\0」这个就有点意思了,这个其实也就是数值 0

测试程序

#include <stdio.h>
#include <string.h>
int main () {char c = '\0';printf("'%c' 0x%x %d\n",c,c,c); return 0;
}

程序输出

' ' 0x0 0--------------------------------
Process exited after 0.03893 seconds with return value 0
请按任意键继续. . .

好了,就这些,看了这些之后,就再也不用担心如果一个字符串里面有 0 字符不知道怎么做算法比较了吧。

推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言


嵌入式Linux

微信扫描二维码,关注我的公众号 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【uoj#207】共价大爷游长沙 随机化+LCT维护子树信息

题目描述 给出一棵树和一个点对集合S&#xff0c;多次改变这棵树的形态、在集合中加入或删除点对&#xff0c;或询问集合内的每组点对之间的路径是否都经过某条给定边。 输入 输入的第一行包含一个整数 id&#xff0c;表示测试数据编号&#xff0c;如第一组数据的id1&#xff0…

ping 命令的几种使用方法?

ping命令的几种使用方法&#xff1f;它是最基本&#xff0c;最常用的&#xff0c;测试物理网络的命令&#xff0c;它的使用频率很高&#xff0c;主要用于确定本地主机和另一台主机能否成功进行发送或接收数据包&#xff0c;根据返回的信息&#xff0c;我们就可以判断TCP/IP参数…

MongoDB基本应用操作整理

启动服务&#xff1a;mongod --dbpathg:/mongo/data 访问服务器&#xff0c;如下&#xff1a; mongodb这个软件的端口是27017 可以把mongo服务配置成系统服务。 使用命令如下&#xff1a; mongod --dbpathg:/mongo/data --logpathg:/mongo/mongo.log --install 在Mongo中就三…

周五跟大佬喝酒,顺便打了个球

这是前天发生的事情&#xff0c;昨天写好了文章&#xff0c;今天才发出来&#xff0c;但是名字还是想写成昨晚小聚。昨晚逍遥和啊尚过来找我打球&#xff0c;很开心&#xff0c;虽然酝酿了好久关于这次的活动&#xff0c;但是它真的发生时&#xff0c;我还是显得有些突兀和紧张…

安装Cygwin

Cygwin安装 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 下载cygwin&#xff1a;https://www.cygwin.com/ 箭头指的地方点一下就是安装该软件&#xff0c;开始要安装的一些软件&#xff0c;gcc&#xff0c;gdb&#xff0c;make&#xff0c;ssh等等。…

修练8年C++面向对象程序设计之体会

面向对象程序设计语言很多&#xff0c;如Smalltalk、Ada、Eiffel、Object Pascal、Visual Basic、C等等。C语言最讨人喜欢&#xff0c;因为它兼容C 语言&#xff0c;并且具备C 语言的性能。近几年&#xff0c;一种叫Java 的纯面向对象语言红极一时&#xff0c;不少人叫喊着要用…

JavaScript——使用对话框

alert 该对话框只用于提醒&#xff0c;不能对脚本产生任何改变。它只有一个参数&#xff0c;即为需要提示的信息&#xff0c;没有返回confirm 该对话框一般用于确认信息&#xff0c;它只有一个参数&#xff0c;返回值为true或falseprompt 该对话框可以进行输入&#xff0c;并返…

飞机上一般是什么操作系统?

之前波音737MAX空难失事事件牵动人心&#xff0c;让人对航空出行又平添了一份不信任&#xff0c;根据最新消息显示&#xff0c;美国联邦航空局对737 MAX机型的大量评估授权给波音公司自身进行&#xff0c;安全评估存在严重缺陷。也传出了波音737 MAX客机的培训都是通过平板电脑…

地铁上怎么那么多钢管女郎?

每天早上拖着疲惫的身体&#xff0c;逆着人流走向地铁站&#xff0c;人好多。开门&#xff0c;上车&#xff0c;想找根钢管来平衡一下身体&#xff0c;没想到有美女在抱着钢管跳舞。。。换个钢管吧&#xff0c;又有一个抱着钢管的美女。。。请问一下各位女士&#xff0c;你们那…

排查一个触摸屏驱动问题

今天跟同事看一个TP驱动&#xff0c;上电后日志都正常&#xff0c;但是触摸没反应&#xff0c;然后开始排查。上电后可以正常读到芯片的chip ID&#xff0c;那说明I2C是通讯正常的&#xff0c;也可以说明触摸芯片的供电也是正常的。基于这个&#xff0c;我搬来示波器&#xff0…

javaScript——内置函数1

JavaScript中有两种函数&#xff1a;一种是语言内部事先定义好的函数叫内置函数&#xff0c;另一种是自己定义的 函数。使用内置函数&#xff0c;可提高编程效率&#xff0c;其中有六种内置函数。 eval函数 eval&#xff08;expr&#xff09;函数可以把一个字符串当作一个JavaS…

vmware安装ubuntu

vmware安装Ubuntu 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 &#xff08;1&#xff09; 单击”Power on this virtual machine”开始安装Ubuntu系统 经过一段时间的等待出现如下界面,单击”Install Ubuntu”进行安装 在安装的时候&#xff0…

SQL server挂了之后

今天在服务器上的SQL server挂了之后,重新装了,可老提示什么狗P程序被挂起的信息,最后不得不细找原因,功夫不负有心人,终于找出了病症所在,K,我要早知道这么简单,就再也不装系统了.....汗死,详情如下,做个备份,以便今后再碰到类似问题有地方查! 先运行你的安装程序&#xff0c;…

AWS 免费套餐

https://amazonaws-china.com/cn/free/ 需要的可以看下&#xff0c;我准备搞一个RDS。 转载于:https://www.cnblogs.com/hupo376787/p/8268562.html

C++指针的应用

C指针 文章中我们介绍了指针的基本概念和应用简介。我们有提到指针可以使用在链表、队列和二叉树&#xff0c;等等。但是这些都会比较复查&#xff0c;后面"数据结构” 时&#xff0c;我们会用专门的章节来讲解这些知识。这篇文章&#xff0c;详细的探讨一下指针和其他关联…

Matplotlib——创建散点图

入门&#xff1a; 导入所用到的包 import numpy as np import matplotlib.pyplot as plt as 是对包起一个名字&#xff0c;便于后边程序的编写无颜色差别 figplt.figure() #建立一个画布 axfig.add_subplot(111) #在画布中建立图表&#xff0c;fig.add_subplot(…

vmwaretools安装

vmwaretools安装 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 vmware的作用&#xff1a;windows和linux之间文件拖文件很方便&#xff0c;但是我一般是使用samba服务器&#xff0c;后面介绍samba服务器。 &#xff08;1&#xff09;单击菜单栏上的”…

Android - Glide4.4.0使用

错误信息 java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedValue;ILandroid/widget/TextView;)Landroid/graphics/Typeface; in class Landroid/support/v4/content/res/ResourcesCompat; or its super classes (declara…

渐入“衰”境:警惕企业的六大老人病

1.组织惯性成员的思维、行为惯性容易汇聚成为阻碍组织前行的组织惯性。在企业管理的实施过程中&#xff0c;组织成员特别是老人有时并不按照新的架构流程和制度规范去工作。这不全是因为大家不接受新的系统&#xff0c;而是一工作就回到原先习惯的状态—我们把这个现象称为组织…

机器学习——支持向量机主要思想

概念&#xff1a;支持向量运算的分类器&#xff0c;在数据上应用基本形式的SVM分类器就可以得到低错误的结果&#xff0c;能够对训练集以外的数据点做出很好的分类决策。 名词&#xff1a; 支持向量&#xff1a;离分离超平面最近的那些点&#xff0c;需要找到最大化支持向量到分…