1,声明 struct 结构体类型名称 数组名称[数组长度];
"例子: struct Student students[5];
表示声明了1个长度为5的数组 . 数组名称叫做students 数组的元素的类型是struct Student类型.
2,初始化 1). 先声明结构体数组,然后用下标1个1个元素的赋值. 注意: 当我们为结构体数组的元素赋值的时候.如果直接使用大括弧来初始化,需要强转. "注意:如果用大括弧来初始化结构体元素,必须要在大括弧前面加1个小括弧:(结构体类型) // 否则编译器不知道是给结构体赋值还是二维数组的一行元素赋值。
struct Student students[5]; students[0] = (struct Student){"小明1",16,56}; students[1] = (struct Student){"小明2",18,100} students[2] = (struct Student){"小明3",19,10}; students[3] = (struct Student){"小明4",21,100}; students[4] = (struct Student){"小明5",13,3};
2). 在声明结构体数组的同时,就为所有的元素初始化. struct Student students[5] = { {"小明1",16,56}, {"小明2",18,100}, {"小明3",19,10}, {"小明4",21,100}, {"小明5",13,3} };
3,结构体数组的长度计算. // 长度的计算跟之前计算数组的长度是差不多的吧。 总字节数/每1个元素占用的字节数 1). 先使用sizeof计算出数组占用的总的字节数. 2). 使用总字节数 除以 每1个元素占用的字节数.
//int len = sizeof(students) / sizeof(struct Student);
//int len = sizeof(students) / sizeof(students[0]);
"结构体占用字节数的补充 为结构体分配空间大小时,遵循两个倍数: 1.在分配当前小变量空间大小之前,编译器先调整之前 已经分配的空间大小总和 应为当前要分配的变量所占字节的倍数。遵循对齐原则.
2.编译器要求整个结构体所分配的空间大小 是结构体中占用空间最多的类型 所占用空间大小的倍数
// 比如, struct A { char a;//1--->8 double b;//8--->16 int c;//4 --->20--->24 };
1)分配1个字节给a 2) * 分配空间给b之前,要求a占的字节数是double的字节数的倍数,把a占的字节扩展到8字节。 * 分配8个字节给b
现在,已经分配了16字节了。
3) * 因为16是4的倍数,所以可以直接分配 4 个字节给c ,所以,现在总共分配20字节。 * 最后,因为结构体中占空间最大的是double 8个字节,所以,编译器再次调整总空间大小为8的倍数为24字节。
|