当前位置: 首页 > article >正文

C语言字符常量与字符变量..

1.字符常量

诸如’a’、‘b’、'c’这类的都归属于字符常量
而且我们都知道printf()函数接收的第一个参数是字符串 所以不能够直接将字符常量作为printf函数的第一个参数
并且字符常量对应的占位符为%c

以下是对字符常量的演示

int main(){
    printf("%c%c%c%c", 'a', 'b', 'c', '\n');
    return 0;
}

2.字符类型占用的字节大小

1.字符常量占用的字节大小

在C语言中 对字符常量使用sizeof 那么字符类型会自动提升为int类型 那么检测的就是int类型的字节大小

int main(){
    printf("%zu\n", sizeof('a'));// 4
    return 0;
}

但是在C++中 打印的结果是1 也就是能够正确打印出char类型所占用的字节大小
本质上就是如果采用了C++编译器的话(visual studio文件的后缀名为cpp) 那么就可以正确获取结果
如果采用的是C编译器的话(visual studio文件的后缀名为c) 那么打印的就是int类型所占用的字节大小

2.字符变量占用的字节大小

那么如果检测的对象变成了字符变量的话 那么就可以正确获取字符类型占用的字节大小

int main(){
    char ch = 'a';
    printf("%zu\n", sizeof(ch));// 1
    return 0;
}

3.整数与字符的对应关系–ASCII

如果我们将前面打印字符的占位符换成%d的话 那么结果会是什么呢

int main(){
    printf("%d %d %d\n", 'a', 'b', 'c');// 97 98 99
    return 0;
}

可以发现 结果是一堆整数
其实这些整数就是ASCII码表中所打印字符对应的十进制数值 也是储存在计算机中的字节

打印的结果是字符还是ASCII码表中字符对应的数值 取决于占位符是%d还是%c

4.字符串常量

诸如"HelloWorld"之类的称之为字符串常量

int main(){
    printf("%zu\n", sizeof("HelloWorld"));// 11
    return 0;
}

可以看到 打印的结果是为11 比HelloWorld这个字符串常量的长度多1 那么多出来的1如何解释呢
原来在C语言中 字符串结尾会有一个数值0以标志字符串的结束

1.字符0和数值0

在这边特意讲一下的目的是为了区分他们两个 字符0对应的数值是48 和数值0的差别还是很大的

int main(){
    printf("%d %d\n", 0, '0');// 0 48
    return 0;
}

5.转义字符

int main(){
    printf("Hello\0World");
    return 0;
}

结果只打印了Hello 因为他认为这个字符串到\0就结束了 事实也是如此 我们前面说过了字符串是以数值0作为结尾的 那么’\0’和0肯定是由什么联系的

诸如’\数值’之类称为转义字符 该数值为八进制形式
那么前面所讲的’\0’其实就是一个转义字符 他在ASCII码表中对应的就是数值0 两者是等价的关系

既然我们已经知道转义字符的格式是’\八进制数值’ 那么我们可以尝试一下通过转义字符打印"Hello"这个字符串

int main(){
    printf("\110\145\154\154\157\n");// Hello
    return 0;
}

可以看出 Hello被我们正确打印出来了

但是我们平常见到过换行符是以’\n’的形式存在的 这又是为什么?
其实就是因为数值格式存在的转义字符比较难以记忆 所以就通过一些字母进行替代 方便记忆

int main(){
    printf("\12\n");// 打印了两个换行
    return 0;
}

可以看到\12和\n的效果是一样的 都展示了换行的效果

以下是一些常见的字母格式的转义字符
在这里插入图片描述
在这里插入图片描述
有一些字符无法在键盘上体现 这被称为不可见字符 在ASCII码表中体现为前32个字符(数值0-31)
在这些不可见字符中 不是全部都有字母格式的转义字符 有些需要查表获取八进制数值以表示转义字符


http://www.kler.cn/news/234162.html

相关文章:

  • 前端修炼手册(uniapp的api篇)
  • Ansys方法基础
  • MacOS - M1芯片 Mac 在“恢复”模式中启用系统扩展教程
  • 更新win11后无法上网
  • Java继承和组合
  • 【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏17(附项目源码)
  • 如何解决利用cron定时任务自动更新SSL证书后Nginx重启问题
  • 如何从 iPhone 恢复已删除的视频:简单有效方法
  • 【漏洞复现】多语言药房管理系统MPMS文件上传漏洞
  • [论文总结] 深度学习在农业领域应用论文笔记12
  • LayUI中表格树折叠 --
  • Redis -- 安装客户端redis-plus-plus
  • 形态学算法之边界提取的简单python实现——图像处理
  • C# Socket通信从入门到精通(21)——Tcp客户端判断与服务器断开连接的三种方法以及C#代码实现
  • 1.5 Binance_interface API 币本位合约行情
  • Java基础知识总结(持续更新中)
  • 第一篇【传奇开心果微博文系列】Python微项目技术点案例示例:pillow库实现毛笔字春联
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:461-480)
  • 【RabbitMQ(二)】:Exchange 详解 | Message Convert 消息转换器
  • (注解配置AOP)学习Spring的第十七天
  • 每日五道java面试题之java基础篇(五)
  • 43.1k star, 免费开源的 markdown 编辑器
  • grafana+prometheus+hiveserver2(jmx_exporter+metrics)
  • [AIGC] Spring Gateway:一个简单 yet powerful API 网关
  • 每日五道java面试题之java基础篇(二)
  • Go内存优化与垃圾收集
  • 安全之护网(HVV)、红蓝对抗
  • 蓝桥杯官网练习题(Excel地址)
  • 【Chrono Engine学习总结】3-地型terrain
  • Linux基础-配置网络