C语言中结构体数组初始化的问题

struct information{
    char seat_num[LEN];
    int sold;
    char fname[LEN];
    char lname[LEN];
};

struct information info[12] = {{"", 0, "", ""}};
//上面这个初始化语句是只对struct information info[0]做了一次初始化,还是对12个info数组都做了初始化?

 

我个人觉得是仅对info[0]初始化. 他不像数组那样int a[10] = {0};对全部元素进行初始化。

就数组来说,数组的初始化有以下几种情况:

int a[]={1,2,3,4},这种是数组空间大小不确定,由数组元素决定,从而自动向系统申请操作空间

int a[5]={1,2,3,4,5},这种是数组空间大小和元素个数相等的情况,按位置逐个赋值

int a[10]={0},这种情况最特殊,不是说这个步骤的实际意义是对整个数组全部赋值为0,而是针对a[0],这个地方的实际意义是a[0]=0!!!!针对这种空间大小大于元素个数的情况,无论是字符数组、整型数组、自定义类型(包括结构体)数组,C语言都有明确的规定,即:

初始化时,如果元素个数小于空间大小,那么整型数组的其他元素全部初始化为整型0,字符数组的其他元素全部初始化为'\0'。针对结构体数组,就算你是单个的结构体,你的成员变量有n个,但是你只对其中一个赋值,那么你的其他n-1个成员,数字型的赋值为0,字符型赋值为'\0'。结构体数组类似

我们常常使用初始化的原因为:为了不让数组中的其他元素出现随机值的情况从而影响程序的判断和执行!!!!而不是说你定义了第一个,然后后面的就自动与首元素相等

如int a[5]={0},那么a[0] = 0,a[1]~a[4]都为0,这不是直接全部为0,这只是碰巧

int a[7]={1},那么a[0] = 1,a[2]~a[6]都为0