C语言学习笔记(1)


文章目录

  • C语言学习笔记(1)
  • 前言
  • 一、\0是什么?
  • 二、与NULL、‘0’、0的区别
    • 1.与NULL的区别
    • 2.与‘0’和0的区别
  • 总结

前言

本文记录在学习过程中,遇到的关于‘\0’的一些问题。


一、\0是什么?

\0是C语言中用于标识字符数组结尾的特殊字符,\0在字符数组中和普通字符一样会占据一个字符的存储空间。

int main(){char str[] = "hello";int len = sizeof(str);       //结果为6
}

\0在ASCII码表中的信息如下:

二、与NULL、‘0’、0的区别

1.与NULL的区别

在C语言中,NULL一般指空指针,表示不指向任何东西。其定义如下:

#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif

可以看到,NULL底层就是整型0,底层表示为00000000。所以可以说,NULL和‘\0’以及整数0是同样的底层01码在不同使用场景的解读,两者在一些场景可以直接互换,如下所示,但是不建议这么做:

char str[] = "hello world";
char* index = str;
index += 5;
*index = NULL;char* inter = '\0';
char ch = NULL;

2.与‘0’和0的区别

首先,字符‘0’在ASCII的信息如下:

其十进制的大小是48,这里就可以引出一个重要的差异,即在if,while等判断语句下,\0不能通过判断,而‘0’是可以的。

代码如下(示例):

 int a = 0;char b = '0';char c = '\0';char* d = NULL;if (a)printf("a is TRUE\n");if (b)printf("b is TRUE\n");if (c)printf("c is TRUE\n");if (d)printf("d is TRUE\n");

这段代码中只有b可以通过判断。究其原因,在C语言中,因为没有布尔类型,而是使用整型来进行判断,我们知道计算机所有的字符底层都是01,解读方式的不同带来了不同的含义,如00110000解读为字符为‘0’,解读为整数就是48,所以C语言中只有00000000为假,其余所有均为真,而00000000可以解读为整数0和字符‘\0’,所以在判断时为假。
利用这一点可以进行一些字符串操作时简化代码,如下:

#从字符串中查找第一个子串并删除
char *match(char *str,char *want)
{while(*want != '\0')if(*str++ != *want++)return NULL;return str;
}int del_substr(char *str,char const *substr)
{char *next;while(*str != '\0'){next = match(str,substr);if(next != '\0')break;str++;}if(*str == '\0')return 0;//利用赋值表达式的值为左操作数的新值和'\0’判断为假来完成主串中子串的删除。while(*str++ = *next++);return 1;
}

总结

看似简单的‘\0’,往下深究也能学到很多,在学习中要有这种刨根问题的精神。以此自勉。

C语言中的‘\0’、0、‘0’和NULL辨析相关推荐

  1. n%i==0在c语言作用,在C语言中,if(n%i==0,)是什么意思?n和i分别为一个数、 , c语言中 if(n%i==0) break 什么意思...

    导航:网站首页 > 在C语言中,if(n%i==0,)是什么意思?n和i分别为一个数. , c语言中 if(n%i==0) break 什么意思 在C语言中,if(n%i==0,)是什么意思?n ...

  2. C语言中while判断为0,在C语言中,为了结束由do-while语句构成的循环, while后一对圆括号中表达式的值应该能够为0()...

    品和标它列效指的所出企服务业产有绩,中为值这两个维度是,每个行打客对指标个维的两度进让顾分绩效,偏于图模型是型定性的诊断模一种研究四分. 票价团体另行在()公格.语言e语对圆括格及的价价格示门收费收费 ...

  3. c+语言+null,C/C++语言中NULL、'\0’和0的区别

    NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...

  4. c语言中 static int,c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了。...

    c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...

  5. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...

  6. C语言中的bool变量

    在一些高级语言当中,为了能够完成更好的逻辑判断,因此就有了bool类型,bool类型的变量值只有true和false两种. 而在C语言中,一般认为0为假,非0为真. 这是因为c99之前,c90是没有b ...

  7. python为什么从0开始_为什么大多数编程语言中,索引都是从0开始

    为什么大多数编程语言中,索引都是从0开始 世界上绝大多数语言,但凡涉及到了索引这个概念,索引都是从0开始的,对于初学者,难免觉得别扭,毕竟生活中,但凡涉及到和顺序有关的概念,都是从1开始的,那么为什么 ...

  8. C语言中的static 详细分析 2014-10-11 15:15 143人阅读 评论(0) 收藏...

    转自:http://blog.csdn.net/keyeagle/article/details/6708077 看到这篇文章针对C语言的static关键字解释的比较好,这里转载过来.谢谢原作者分享. ...

  9. c语言中 调用函数除函数名外,【单选题】在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分) A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值...

    [单选题]在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分) A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值 更多相关问题 下列关于IMOECDIS性能标 ...

  10. c语言中转义字符 0,【填空题】在C语言中,用“\\”开头的字符序列称为转义字符, 转义字符‘\\n’的功能是_____; 转义字符‘\\0’的功能是_____;...

    [填空题]在C语言中,用"\\"开头的字符序列称为转义字符, 转义字符'\\n'的功能是_____; 转义字符'\\0'的功能是_____; 更多相关问题 在MGB1420万能磨床 ...

最新文章

  1. 启用vsftpd服务
  2. ShopEx 手动使用分类做导航时,获取当前导航的焦点状态
  3. Huffman编码(Huffman树)
  4. C++中类和对象的一些注意事项
  5. Linux网络协议栈:一个TCP链接的耗时
  6. 默认conf指向位置
  7. 个位数不含4用计算机表示,计算机组成原理
  8. Mysql binlog入门
  9. 通用窗口类 Inventory Pro 2.1.2 Demo1(上)
  10. 新广告法违规词、敏感词在线检测工具
  11. CSS背景图片代码示例
  12. 软考高级信息系统项目管理师经验分享
  13. 百度地图点聚合解决方案
  14. 一些名片上最常用的中英文称呼:
  15. 有趣好玩的带音乐24H全自动在线要饭系统源码
  16. 引导图(TapTargetView)
  17. uniapp跳转第三方地图导航
  18. RNDIS设备开发手记
  19. 基于vlc-Qt的视频播放器(支持添加视频列表、单曲循环等)
  20. 转载:改“条件导向法”为“目标倒推法”

热门文章

  1. UML设计中的9中图例(简单版)
  2. 二叉树中前序 中序 后序的互推
  3. 西南石油大学计算机专业复试经验,西南石油大学
  4. 什么是事务? 事务的隔离级别和事务运行的模式分别是什么?spring 事务和分布式事务实现方式有哪些?
  5. jquery ajax request payload,post请求 request payload问题
  6. WAIC 2021 | 共话AI开源开放之道,赢取惊喜好礼!
  7. linux read phy reg,PHY
  8. makefile进入子文件夹执行make
  9. 华创期货:止损还是抗单决定亏损还是盈利
  10. 基于Python实现的CTF Crypto加密解密工具