在C语言中字符数组的初始化有三种常见的方法:
char a[5] = {'a','b','c','d','e'};
char c[] = {'a','b','c','d','e'};
char b[] = "abcde";
第一种初始化的方式,在定义字符数组时直接给出数组的长度和数组的值;
第二种初始化的方式,在定义数组时并未给出数组的长度,而是根据后面的赋值,在编译器编译时为数组固定长度。
第三种初始化的方式,利用字符串来为字符数组赋初值,这种方式在定义是无需指定数组的长度。不过这种方式不同于前两种。
可以通过下面的例子来看:
#include <stdio.h>
int main()
{
int i = 0;
char a[5] = {'a','b','c','d','e'};
char b[] = {'a','b','c','d','e'};
char c[] = "abcde";
printf("sizeof(a):%ld\nsizeof(b):%ld\nsizeof(c):%ld\n",sizeof(a),sizeof(b),sizeof(c));
return 0;
}
运行的结果如下:
sizeof(a):5
sizeof(b):5
sizeof(c):6
可以看出最后一种初始化的数组长度与前两种不一样,这是为什么呢?原因在于那个初始化的字符串上面。一个字符串在计算机中用‘\0'来表示字符串结束。所以我们看到的"abcde",在计算机中的表示是啊'a' 'b' 'c' 'd' 'e' '\0'。事实上最后一种初始化得到的字符数组的大小为初始化字符的个数加上1。因为’\0‘作为数组的最后一个元素,但是该字符在输出时并不显示。
版权声明:本文为qq_25105061原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。