字符数组
char word[] = { 'H','e','l','l','o','!' };
word[0] | H |
word[1] | e |
word[2] | l |
word[3] | l |
word[4] | o |
word[5] | ! |
↑这不是C语言的字符串,因为不能用字符串的方式做计算
字符串
char word[] = { 'H','e','l','l','o','!','\0' };
word[0] | H |
word[1] | e |
word[2] | l |
word[3] | l |
word[4] | o |
word[5] | ! |
word[6] | \0 |
▲ 以0(整数0)结尾的一串字符
◆ 0或'\0'是一样的,但是和'0'不同
▲ 0标志字符串的结束,但它不是字符串的一部分
◆ 计算字符串长度的时候不包含这个0
▲ 字符串以数组的形式存在,以数组或指针的形式访问
◆ 更多的是以指针的形式
▲ string.h里有很多处理字符串的函数
字符串变量
char* str = "Hello";
char word[] = "Hello";
char line[10] = "Hello";
字符串常量
▲ "Hello"
▲ "Hello"会被编译器变成一个字符数组放在某处,这个数组的长度是6,结尾还有表示结束的0
▲ 两个相邻的字符串常量会被自动连接起来
【例】
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
printf("你好"
"我好"
"大家好");
return 0;
}
程序的结果如下图所示,说明编译器将三个字符串连接起来,“拼合”成一个大的字符串,然后传递给了printf()函数:
如果要使程序代码显得更加“苗条”的风格,除了可以采用上述方案外,还可以这样写:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
printf("你好\
我好");
return 0;
}
这样在前一行加上一个反斜杠“\”,也可以实现代码的换行而输入内容不换行,但要注意下一行的内容必须顶格书写而不能有缩进,效果如下图所示:
【总结】
▲ C语言的字符串是以字符数组的形态存在的
◆ 不能用运算符对字符串做运算
◆ 通过数组的方式可以遍历字符串
▲ 唯一特殊的地方是字符串字面量可以用来初始化字符数组
▲ 以及标准库提供了一系列字符串函数