前言
因为本人前期自学过python,java的基础,所以现在学 c 经常把字符串数组的用法搞混乱,所以现在回来重新温习下这个知识点,也是防止以后再次搞混乱后能方便查阅(尴尬…),故写了这篇博文,文章内容随意书写,所涉及的知识点仅供参考!!
字符数组
- 定义的几种常见方式
//字符数组
char c[] = {'a', 'b', 'c'};
char ch[4] = {'s','a', 'b', 'c'};
char ch1[4] = {'s'};
其中平时常用的方式是char c[] = {'a', 'b', 'c'};
这种方式没有指定数组大小,它会根据参数的个数自动扩展大小,是我们平常比较喜欢用的方式。
- 引用及赋值
printf("c[1]的值为:%c\n",c[1]);//输出b
c[1] = 'd';
printf("c[1]的值为:%c\n",c[1]);//输出d
引用:通过数组名加下标的方式:数组名[下标] printf("c[1]的值为:%c\n",c[1]);
赋值的话除了定义的时候可以直接把多个值进行赋值,例如:char c[] = {'a', 'b', 'c'};
否则其他时候只能通过数组名[下标] = ‘字符’
这种方式单个一 一赋值,当然,如果这个值已经存在,则会覆盖掉原来的值,以最新赋值为准,就像上面代码的c[1] = 'd'
,d会把原先存于c[1]中的 b 覆盖掉,以后对c [1]进行取值,得到的结果只会是d。
字符串数组
- 定义
char c1[] = {'p', 'a', 'b', 'c', '\0'}; //一维字符串数组
char str[] = "string"; //一维字符串数组
char str1[] = {"string"}; //一维字符串数组
char str2[][4] = {"abc", "efg", "hij", "klmn"}; //二维字符串数组
字符数组加上一个‘\0’
后就变成了字符串数组,c1 等同于 这种写法:char c1 = "pabc
;原因在于字符串它是以\0
结尾的,而我们只要以字符串的格式%s
来打印字符数组,它会把这个字符数组打印出来,直到遇到\0
才结束,故最终会打印出一串字符串。
- 引用
char c1[] = {'p', 'a', 'b', 'c', '\0'}; //一维字符数组
char str[] = "string"; //一维字符串数组
char str1[] = {"string"}; //一维字符串数组
char str2[][4] = {"abc", "efg", "hij", "klmn"}; //二维字符串数组
printf("c1 = %c\n", c1[3]); //输出c
printf("str = %s\n", c1); //输出pabc
printf("str = %s\n", str); //输出string
printf("str = %c\n", str[0]); //输出 s
printf("str1 = %c\n", str1[0]); //输出 s
printf("str = %s\n", str1); //输出string
printf("str2 = %c\n", str2[1][1]); //输出f
printf("str2 = %s\n", str2[1]); //输出efg
通过以上代码的输出验证,我们不难发现,str 是 str 1
的简写,两者含义是等同的,而char str2[][4] = {"abc", "efg", "hij", "klmn"};
这种格式的字符串数组则是一种二维字符串数组的书写格式,二维字符串数组还是比较常用的,特别是在项目中,二维字符串数组几乎是必用的。故这在里罗列出来,通过字符串数组的四种格式对比,能较清楚的明白它们之间的区别,方便牢记!