C语言不定长数组及初始化方法
C语言不定长数组及初始化方法 C语言中不支持不定长数组,需要使用malloc或在动态指定数组的长度来实现动态数组。动态数组不能初始化,需要使用memset或其他方法来初始化。使用arr[]定义数组时,需要在后面指定数组的长度,否则编译可以通过,但实际上只有一个单元的数组。 在C语言中,数组可以用一个列值来初始化,例如`int v1[] ={1,2,3,4};`和`char v2[]={'a','b','c',0};`。当数组定义时没有指定大小时,初始化时列表元素个数将决定数组的大小。例如,`v1`和`v2`分别为`int[4]`和`char[4]`类型。 如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。例如,`char v3[2] ={'a','b',0};`将产生错误,因为初始化的元素个数超过了数组的大小。 在初始化数组时,如果指定的元素个数少于数组的大小,则剩下的元素都将被初始化为0。例如,`int v5[8]={1,2,3,4};`等价于`int v5[8]={1,2,3,4,0,0,0,0};`。 需要注意的是,在C语言中,不允许使用以下形式的数组赋值:`void f() { v4={'c','d',0}; }`。 集合(aggregate)是指多个事物聚集在一起,包括混合类型的集合,如struct和class等。数组就是单一类型的集合。在C语言中,集合初始化往往既冗长又容易出错,而C++中集合初始化变得很方便而且很安全。 在C语言中,集合初始化可以用大括号括起来,例如`int a[5] = { 1, 2, 3, 4, 5 };`。如果给出的初始化值多于数组元素的个数,编译器就会给出一条出错信息。但如果给的初始化少于数据元素的个数,那将会被初始化为0。例如,`int b[6] = {0};`将会把第一个初始化值赋给数组的第一个元素,然后用0赋给其余的元素。 C语言不定长数组及初始化方法需要注意数组的长度和初始化的元素个数,以避免编译错误和运行时错误。