字符常量与字符串常量
文章目录
- 字符常量
- 非打印字符
- 字符串常量
- 字符数组
- 字符指针
字符常量
利用char
声明
字符常量用于储存字母和其它字符,本质上储存的是整数(ASCII字符集)而不是字符。
#include<stdio.h>
int main()
{char a = 'd';//c语言中用单引号括起来的就是字符常量。char b = 0B01100100;//字符以数值形式储存。printf("%d\n%c", a, b);
}
运行结果:
100
d
注意的问题
C语言将字符常量视为int
类型而非char
类型。
char grade = 'B’ 本来’B’对应的数值66储存在32位的存储单元中,现在却可以储存在8位的存储单元中。利用字符常量的这种特性,可以定义一个字符常量 ’FATE’ ,即把4个独立的8位ASCII码储存在一个32位存储单元中。如果把这样的字符常量赋给char
类型变量 grade ,只有最后8位有效。因此, grade 的值是 E.
非打印字符
一些代表行为的字符无法打印出来:退格,换行,终端响铃或者蜂鸣
两种方法表示这些字符
- 使用ASCII码
警报符的ASCII为7 char cheep=7
- 使用转义序列
char cheep = '\7’ 等价于 char cheep =’\a’
转义序列 | 含义 |
---|---|
\a | 警报(ANSIC)(不得改变活跃位置) |
\b | 退格 |
\f | 换页(把活跃位置换到下一页开始处) |
\n | 换行(把活跃位置移到下一行开始处) |
\r | 回车(把活跃位置移到当前行开始处) |
\t | 水平制表符(把活跃位置移到下一个水平制表点)(vc++按照8个空格补齐) |
\v | 垂直制表符(把活跃位置移到下一个垂直制表点) |
\and\ | 反斜杠\ |
\and’(") | 单引号(双引号) |
\? | 问号 |
\0oo | 八进制值(每个o表示0~7中的一个数) |
\xhh | 十六进制值(每个h表示0~f中的一个数) |
活跃位置:指显示设备中下一个字符将出现的位置,光标也就是活跃位置
注意问题:这些转义序列字符不一定在所有的显示设备上都起作用。例如,换页符和垂直制表符在PC屏幕上会生成奇怪的符号,光标并不会移动。只有将其输出到打印机上时才会产生前面描述的效果。
字符串常量
在C语言中,字符串有两种存储方式。
- 字符数组存储
- 字符指针存储
字符数组
一个字符在内存中只占一字节,而字符串本质上是多个字符组成的字符数组。
C语言规定,在每一个字符串常量的结尾,系统都会自动加一个字符 ’\0’ 作为该字符串的“结束标志符”,系统据此判断字符串是否结束。这里要特别强调一点: ’\0’ 是系统自动加上的,不是人为添加的。
’\0’ 它不会引起任何控制动作,也不是一个可以显示的字符。
比如字符串常量"CHINA",表面上看它只有5个字符,但实际上它在内存中占6字节,‘C’、‘H’、‘I’、‘N’、‘A’、’\0’ 各占一字节。如果要输出该字符串,’\0’ 不会输出。也就是说,虽然实际上总共有 6 个字符,’\0’ 也包括在其中,但输出时 ‘\0’ 不会输出。系统从第一个字符 ‘C’ 开始逐个输出字符,直到遇到 ‘\0’,则表示该字符串结束,停止输出。
#include<stdio.h>
int main()
{char arr1[] = "abcd";printf("%d\n",sizeof(arr1));printf("%d\n",sizeof("abcd"));
}
运行结果:
5
5
若结尾无\0
#include<stdio.h>
int main()
{arr1[2];arr2[2];arr1[0] = 'a';arr1[1] = '\0';arr2[0] = 'a';printf("%c\n%c", arr1, arr2);
}
运行结果
a
a烫烫烫烫烫蘟
字符指针
字符串常量是一个表达式,既然使表达式就会有值,字符串常量的值是该字符串第一个字母的首地址
同一个字符串常量,它们的值(地址)相同
#include<stdio.h>
int main()
{const char* p = "Hello";const char* q = "Hello";printf("%p\n%p", *p, *q);
}
运行结果
00000048
00000048
谢谢!
字符常量与字符串常量相关推荐
- c语言字符常量和字符串常量_C语言中的字符常量
c语言字符常量和字符串常量 Any character (a single character) that is enclosed within the single quotes (like, 'A ...
- C语言字符常量、字符串常量、字符数组使用
C语言中字符常量的定义.赋值.输入.输出格式如下: #include <stdio.h>int main(){char a;//定义字符常量 char b;char c='abc';//多 ...
- 汇编 整数常量 实数常量 字符常量 字符串常量 保留字 标识符 伪指令 指令 nop指令
整数常量 [{ + | - }] digits { radix } 符号 含义 h 十六进制 q/o 八进制 d 十进制 b 二进制 r 编码实数 t 十进制(备用) y 二进制(备用) 24 ; 十 ...
- C语言 - 字符常量 字符串常量
字符常量是由一对单撇号括起来的单个字符 字符串常量,顾名思义就是多个"字符"串在一起,字符串常量是用"双撇号"括起来的多个字符的序列 ****** 只要是&qu ...
- java字符常量括_Java常量 变量 数据类型
常量分为两种: 1:字面值常量: A: 字符串常量,需要双引号括起来 "helloword" B:整数常量 10 C :小数常量 8.9 D:字符常量, ...
- 理解Java字符串常量池与intern()方法
理解Java字符串常量池与intern()方法 阅读目录 Java内存区域 两种创建方式在内存中的区别 解释开头的例子 intern()方法 参考资料 String s1 = "Hello& ...
- java字符串常量池长度_Java String类相关知识梳理(含字符串常量池(String Pool)知识)...
目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...
- C语言字符型常量和字符串常量的区别
定界符 字符串常量这玩意是由双引号罩着的,这跟字符常量的定界符('')不一样 长度 字符型就单引号里面一个,字符串就不一样双引号里面可以为0也能为其他整数 储存要求 字符常量存储的是字符的ASCLL码 ...
- c语言定义一个字符型变量,C语言-字符与字符串常量及变量
字符型数据 字符常量:用单引号括起来的一个字符例如:'a' 'A''$''!' 注:'a'与'A'是不同的字符常量 转义字符:①以一个'\'开头的字符序列 例如:'\n'换行 '\t'横向跳格(水平制 ...
- 字符型常量与字符串常量的深度解析
字符常量是指用一对单引号括起来的一个字符.如'a','9','!'.一般作为整型数据来进行运算. 详解与比较: 字符常量:在C语言中一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个 ...
最新文章
- 电子工程师要学的课程有哪些?
- [C++程序设计]指针总结
- python算法与数据结构-二分查找算法
- java打印6个偶数_Java编写一个应用程序,打印所有偶数从2到100
- 谷歌相册_Google相册中的新存档功能是什么?
- 如此生猛的纪录片,背后是难以置信的故事!
- Careercup - Microsoft面试题 - 5752271719628800
- 谈谈linux内核原理,谈谈Linux内核驱动的coding style
- Linux 命令(78)—— rmdir 命令
- mips 系统桥_系统功能调用实现简单输入输出(mips)
- WEB前端基础-HTML CSS总结.xmind思维导图
- 3年才能驾驭新技术,不如试试这个低代码魔方
- 《打开量化交易的黑箱》读书笔记
- qt 设置按钮大小_QT使用教程(四)之初体验
- IntelliJ IDEA设置豆沙绿背景
- IceWarp邮件监控功能
- 前端培训教程JavaScript
- STM32F407ZGT6的串口通信
- 基于Cloudflare搭建属于自己的GitHub加速站,github下载无忧
- 测试数据科学家进行机器学习的40个问题
热门文章
- android 动画库
- python对称加密算法库_对称加密算法
- JAVA网络编程个人笔记 第五章 URL和URI
- MATLAB学习笔记————(MATLAB的矩阵及其操作②)
- ios 后台唤醒应用_iOS 前后台机制以及后台唤醒机制【个人学习】
- java mysql模糊查询_java实现的连接数据库及模糊查询功能示例
- ads design environment_ADS射频仿真软件培训材料.pdf
- 操作系统概念之OSAL
- 【ANSYS命令流】结构分析单元与材料模型
- c语言如何输出结构体数组,怎么才能把结构体里面的二维数组打印出来?