一、字符串
字符串可以看做是一个特殊的字符数组,并在字符串的尾部添加了一个结束标志 '\0'。
1. 字符串的初始化
// ‘\0’的ASCII码值是0
// 都是字符串
char name[5] = "it";
char name2[5] = {'i', 't', '\0'};
char name3[5] = {'i', 't', 0};
char name4[5] = {'i', 't'};
char name5[5];
name5[0] = 'i';
name5[1] = 't';
name5[2] = 0;
name5[3] = 0;
name5[4] = 0;
// 不算是一个字符串(只能说是一个字符数组)
char name6[] = {'i', 't'};
2. printf函数
printf函数在输出字符串的时候会从所给的字符串地址开始输出,直到遇到 '\0' 时结束输出。如下:
char name[20] = "helloworld\0welcome";
printf("%s\n", name);
printf("%s\n", &name[3]);
输出:
helloworld
loworld
分析:
printf 函数在输出字符串时,接收的是字符串的地址。
printf("%s\n", name); 中的name其实是name[20]数组中的首地址,和&name[0]同一意思,所以从name[0]开始输出,直到'\0'时结束。
printf("%s\n", &name[3]);也是一样的,从name[3]的位置开始输出,直到 '\0'时结束。
3. strlen函数
1> 计算的字符不包括 '\0'
2> 计算的是字符数,并不是字数。一个汉字算作3个字符
3> 从某个地址开始数字符的个数,直到遇到 '\0' 为止
例如:
int len = strlen("hello");
int len2 = strlen("helloćˆ‘");
int len3 = strlen("hello\0world");
printf("%d\n", len);
printf("%d\n", len2);
printf("%d\n", len3);
输出:
5
8
5
分析:
应用1、2、3点就可以理解了
二、字符串数组
1. 使用场合
1> 一维字符数组中存放一个字符串,比如一个名字char name[20] = "mj"
2> 如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学生的姓名(假设姓名不超过20字符)
3> 如果要存储两个班的学生姓名,那么可以用三维字符数组char names[2][15][20]
2. 初始化
char names[2][10] = { {'J','a','y','\0'}, {'J','i','m','\0'} };
char names2[2][10] = { {"Jay"}, {"Jim"} };
char names3[2][10] = { "Jay", "Jim" };