数组,结构体初始化{0}(转载)
⼀直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1.
调试的时查看内存发现不是那么⼀回事,翻了⼀下《The C++ Programming Language》总算有定论。PDF的竟然不然复制,就把它这章翻译了,如下
5.2.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};  //错误:不是数组赋值
}
如果你想这样的复制的话,请使⽤ vector(16章第三节) 或者 valarray(22章第四节)。
字符数组可以⽅便地采⽤字符串直接初始化(参考第五章 2.2⼩节)
译注:就是这样啦  char  alpha []="abcdefghijklmn";
The C++ Programming Language ,Third Edition by Bjarne Stroustrup.
、、、、、、、、、、、、、、、、、、、、、、、、、、、///
/
、、、、、、、、、、、、
/
该问题涉及到数据类型初始化的问题,现将C语⾔中数据类型初始化总结如下
简单变量的初始化形式如下:数据类型变量名=初始化值;
例如,定义整型变量a,并给其初始化值10的语句如下
int a=10;
数组的初始化,需要通过⼀常量数据列表,对其数组元素分别进⾏初始化,形式如下:
数据类型数组名称〔数组长度〕={初始化值1,初始化值2,…, 初始化值n};
例如,定义长度为5的整型数组,并对其初始化的语句如下:
int A[5]={20,21,0,3,4};
结构体变量的初始化⽅式与数组类似,分别给结构体的成员变量以初始值,⽽结构体成员变量的初始化遵循简单变量或数组的初始化⽅法。具体的形式如下:
struct 结构体标识符
数组全部赋值为1struct 结构体标识符
{
成员变量列表;
};
struct结构体标识符变量名={初始化值1,初始化值2,…, 初始化值n };
例如,定义struct Point类型变量,并初始化的语句如下:
struct Point oP1={0.0,0.2,0.3};
struct Point类型变量oP1的三个成员变量的值分别为
oP1.x=0.0,
oP1.y=0.2
oP1.z=0.3
由于定义结构体变量有三种⽅法,因此初始化结构体变量的⽅法对应有三种,上⾯已经介绍了其中的⼀种形式,其他两种形式如下:struct Point
{
double x;
double y;
double z;
} oP1={0.0,0.2,0.3}; struct
{
double x;
double y;
double z;
} oP1={0.0,0.2,0.3};
在初始化结构体变量时候,既可以初始化其全部成员变量,也可以仅仅对其中部分的成员变量进⾏初始化。例如:
struct Student
{
long id;
char name[20];
char sex;
}a= {0};
其相当于a.id=0;a.name=“”;a.sex=‘/0x0’。
仅仅对其中部分的成员变量进⾏初始化,要求初始化的数据⾄少有⼀个,其他没有初始化的成员变量由系统完成初始化,为其提供缺省的初始化值。各种基本数据类型的成员变量初始化缺省值如表9-1所⽰。
数据类型
缺省初始化值
Int                  0
Char                ‘/0x0’
float                0.0
double              0.0
char Array[n]        ”
int Array[n]        {0,0 0
对于复杂结构体类型变量的初始化,同样遵循上述规律,对结构体成员变量分别赋予初始化值。例如:
struct Line
{
int id;
struct Point StartPoint;
struct Point EndPoint;
}oLine1={0,
{0,0,0},
{100,0,0}
};
其中常量0⽤于初始化oLine1的基本类型成员变量id;常量列表{0,0,0}⽤于初始化oLine1的struct Point类型成员变量StartPoint;常量列表{100,0,0}⽤于初始化oLine1的struct Point类型成员变量EndPoint。
{100,0,0}⽤于初始化oLine1的struct Point类型成员变量EndPoint。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。