结构体 数组 C++

来源:百度知道 编辑:UC知道 时间:2024/05/27 07:51:16
1...
struct data
{
int n;
float score;
};
void main()
{
data a[3]={1001,87,1002,72,1003,90};//为什么定义的是一维数组,
//却有6个元素
...

2...
struct employee
{
char name[20];
char sex;
};
...
void main()
{
employee emp[5]={"liming",'m',"wangxiaoping",'f',"luwei",'m'};
//为什么定义了5个 里面的元素却有6个~
//后面没有定义的默认是0吗?
int i;
for(i=0;i<3;i++)
fun(emp + i)'
}

只截取了一部分,我不明白的是结构体数组的赋值
双斜杠后面有问的问题~
可以解释一下
2的
int i;
for(i=0;i<3;i++)
fun(emp + i);
怎么理解?
emp+i是什么意思?
一定要写<3吗?<6不行吗?

第一题:
data a[3]={1001,87,1002,72,1003,90};
其实是省略之后的:
data a[3]={ {1001,87}, {1002,72}, {1003,90}};
可以见得内层的一个花括号就是一个结构体,外层的花括号中有三个这样的结构体,所以没有错。

第二题:与上一题类似,
employee emp[5]={"liming",'m',"wangxiaoping",'f',"luwei",'m'};
可以看作:
employee emp[5]={ {"liming",'m'}, {"wangxiaoping",'f'}, {"luwei",'m'}};
注意:没有初始化的局部变量默认为不可预测的值(可能是内存里原有的数据);但如果是全局变量,则默认为 0。

data a[3]={1001,87,1002,72,1003,90};//为什么定义的是一维数组,
//却有6个元素
答:因为数组在内存中是连续存储的,所以可以这样赋值。赋值后a[0].n=1001,a[0].score=87;a[1].n=1002,a[1].socre=72;a[2].n=1003,a[2].socre=90;这也同时解释了为什么有6个元素。
上述赋值方式对结构体类型内的成员赋值是一一对应的。

employee emp[5]={"liming",'m',"wangxiaoping",'f',"luwei",'m'};
//为什么定义了5个 里面的元素却有6个~
//后面没有定义的默认是0吗?
答:这句代码实际只对emp[0],emp[1],emp[2]三个数组元素进行了赋值,原理同上。至于emp[3],emp[4]因为没有对它们进行赋值