C语言基础教程目录:https://blog.csdn.net/SparkLee2013/article/details/85229406
1、'x'和"x"
'x'是字符常量,而"x"是字符串串常量,两者是不同的。
一个字符在内存中只占一字节,而字符串本质上是多个字符组成的字符数组。C语言规定,在每一个字符串常量的结尾,系统都会自动加一个字符'\0'作为该字符串的“结束标志符”(字符'\0'的ASCII码是0,字符串常量"x"在内存中不是占用一个字节,而是占用了两个字节空间),系统据此判断字符串是否结束。这里要特别强调一点:'\0'是系统自动加上的,不是人为添加的。
#include <stdio.h>
void main() {
char x1 = 'x';
printf("sizeof(x1) = %d byte, sizeof('x') = %d bytes\n", sizeof(x1), sizeof('x'));
char x2[1] = { "x" };
printf("sizeof(x2) = %d byte, sizeof(\"x\") = %d bytes\n", sizeof(x2), sizeof("x"));
}
# 输出结果:
sizeof(x1) = 1 byte, sizeof('x') = 4 bytes
sizeof(x2) = 1 byte, sizeof("x") = 2 bytes
2、字符串常量存储方式
C语言中没有"字符串"数据类型(在C++/JAVA等语言中是有"字符串"数据类型的),可以通过字符数组(char数组)来替代
字符串一定是一个char数组,但char数组未必是字符串
数字0(和字符'\0'是等价的)结尾的char数组就是一个字符串,但若char数组没有以数字0结尾,则不是一个字符串,只是一个普通的字符数组,故字符串是一种特殊的char数组
在 C 语言中,字符串有两种存储方式,一种是通过字符数组存储,另一种是通过字符指针存储。