时间:2021-01-03 15:35:34 | 栏目:C代码 | 点击:次
C语言不支持不定长数组,要么malloc,要么在动态的指定它的长度
动态数组不能初始化,可使用memset
1.int* p = (int*)malloc(num);
2.int num = 5;
arr[num];
若使用arr[],则需要在后面对齐进行初始化,来指定长度,否则编译可以通过,但是默认只有一个单元,超过一个单元的长度,在后面程序的运行中有可能会被冲掉
int arr[] = {0};//定义了一个单元的数组,并不是不定长数组
最好不用使用arr[] = {0}来定义数组,定义数组之前应要指定长度
int arr[256] = {0};
int a[256]={0};并不是把a的所有元素初始化为0,int a[256]={1};也不是把a所有的元素初始化为1.
数组可以用一个列值来初始化,例如
int v1[] ={1,2,3,4}; char v2[]={'a','b','c',0};
当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。所以v1和v2分别为 int[4] 和char[4]类型。如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。例如:
char v3[2] ={'a','b',0}; //错误:太多的初始化值了 char v3[3] ={'a','b',0}; //正确
如果初始化时指定的的元素个数比数组大小少,剩下的元素都回被初始化为 0。
例如
int v5[8]={1,2,3,4};
等价于
int v5[8]={1,2,3,4,0,0,0,0};
注意没有如下形式的数组赋值:
void f() { v4={'c','d',0}; //错误:不是数组赋值 }
顾名思义,集合(aggregate)就是多个事物聚集在一起,这个定义包括混合类型的集合:像struct和class等,数组就是单一类型的集合。
初始化集合往往既冗长又容易出错,而C++中集合初始化(aggregate initialization)却变得很方便而且很安全。当产生一个集合对象时,要做的只是指定初始值就行了,然后初始化工作就由编译器去承担了。这种指定可以用几种不同的风格,它取决于正在处理的集合类型。但不管是哪种情况,指定的初值都要用大括号括起来。
比如一个内部类型的数组可以这样定义:
int a[5] = { 1, 2, 3, 4, 5 };
如果给出的初始化值多于数组元素的个数,编译器就会给出一条出错信息。但如果给的初始化少于数据元素的个数,那将会怎么样呢?
例如:
int b[6] = {0};
这时,编译器会把第一个初始化值赋给数组的第一个元素,然后用0赋给其余的元素。注意,如果定义了一个数组而没有给出一列初始值时,编译器并不会去做初始化工作。所以上面的表达式是将一个数组初始化为零的简洁方法。