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赋给其余的元素。注意,如果定义了⼀个数组⽽没有给出
⼀列初始值时,编译器并不会去做初始化⼯作。所以上⾯的表达式是将⼀个数组初始化为零的简洁⽅法。
以上这篇C语⾔不定长数组及初始化⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论