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