A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hugin 中级黑马   /  2016-9-22 08:47  /  1459 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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字节。



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马