二、C语言的数据类型
5、字符串变量
上一节讲过,字符型常量是由单引号包含起来的单个字符,比如 'a'
什么是字符串常量?
是用一对双引号包含起来的一堆字符(可以是 1 个字符或者是多个字符),比如”你好,托小托”、”我爱小刷子"等。
例:
注意:
字符常量和字符串常量容易混淆 , 'a'是字符常量,"a”是字符串常量
字符'a'和字符串"a"的内存占用情况,一个小方块代表占用 1 字节,如下图:
重点:字符'a',在内存中占 1 字节,而 "a"在内存中占 2 字节
"a"的最后 一个字符为 '\0' ,这是一个转义字符,也就是说"a"是由 两个字符构成,但 是\0如果出现在 printf 中进行输出,不会显示出来,而是作为字符串结束标记来标记这个字符串内容结束。
例:
上面的代码行输出的结果是 你好,托小托,而后面的 我爱你 没有输出,原因就是系统在输出整个 printf 中的字符串时,一旦遇到 '\0’,系统认为整个字符串输出结束, '\0'后面出现的任何内容都不会被输出。
注意,在写一个字符串常量时,不要手工去增加 '\0' ,这是画蛇添足, '\0'是系统增加的。
所以"a"代表两个字符'a'和'\0',把它赋给一个只有1字节长度的字符型变量会报错。
调试程序时学会查看内存中的内容对深入掌握 C/C++语言编程好处巨大
注意:字符串的存放需要用到字符数组 ,后面会详细讲解,这里只做演示用。
查看内存的方法
试试看一下\0在内存中显示的十六进制数是多少?
扩展:
二进制转十六进制
有两种方法:
1、先二进制转十进制,再十进制转十六进制(详见:第二章 数据类型、运算符与表达式(三))
2、可以根据下表的对应关系
十六进制数 | 对应二进制数 | 十六进制数 | 对应二进制数 |
0 | 0000 | 8 | 1000 |
1 | 0001 | 9 | 1001 |
2 | 0010 | A | 1010 |
3 | 0000 | B | 1011 |
4 | 0100 | C | 1100 |
5 | 0101 | D | 1101 |
6 | 0110 | E | 1110 |
7 | 0111 | F | 1111 |
整数:二进制数转换成十六进制数只需要4位为一组,从右往左进行分组转换
例:1110011
小数:如果有小数部分,则从小数点开始,分别向左右两边补0,小数点左侧不足4位,在左侧补0;小数点右侧不足4位,在右侧补0;再按整的方法转换。
例:10100.01101
十六进制转二进制:
按表一一对应即可
例:0X2FD4
二进制转八进制
有两种方法:
1、先二进制转十进制,再十进制转八进制(详见:第二章 数据类型、运算符与表达式(三))
2、可以根据下表的对应关系
八进制数 | 对应二进制数 |
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
整数:二进制数转换成八进制数只需要3位为一组,从右往左进行分组转换
例:1110011
小数:如果有小数部分,则从小数点开始,分别向左右两边补0,小数点左侧不足3位,在左侧补0;小数点右侧不足3位,在右侧补0;再按整的方法转换。
例:10100.01101
十六进制转二进制:
按表一一对应即可
例:25.22