C语言 字符数组的整体初始化
字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。
例如:
char strl[15] = {"Hello boy"};
或
char strl[20] ="Hello boy";
等价于:
char strl[20] ={'H','e','l','1','0',' ','b','o','y','\0'};
很明显,以字符串形式初始化更简洁一些。
此时数组stri在内存中的存储形式如图所示。
H | e | i | i | 0 | b | o | y | \0 | \0 | \0 | \0 | \0 | \0 | \0 |
从上图可看出,str1[9]中存储的是字符'\0',因为这是一个字符串结束标记,所以C语言所有的字符串处理函数完全忽略'\0'之后数组空间中存放的内容。
从上图可看出,字符串结束标志也要在字符数组中占用一个元素的存储空间,因此在声明字符数组长度时,至少为字符串所需长度加1。
字符串与字符数组的区别就在于是否存在字符串结束标记'\0',例如:
char s1[]="hello";
char s2[5]={'h','e','l','l','o'};
S1和S2中存储的都是相同的内存。但对于S1,系统会自动在末尾增加一个'\0',所以在内存中所占的空间为6个字节。而S2所占空间就是它定义时的长度,5个字节。
字符数组使用字符串初始化时也可省略“元素个数”。例如:
char strl[]="Hello boy";
这样会根据初始化字符串的个数确定str1在内存中所占的空间,因为'\0'也占1个字节,所以str1在内存中所占空间为10个字节。
点击加载更多评论>>