全班同学的信息
char name[40];
float height[40];
float score[40];
...
结构体:
学生这个对象 抽象成一种数据类型
student
{
name
height
weight
age
score
....
}
int
int a;
int a[10]
int *p;
student s; //
总结:
1. 结构体类型
用户自定义类型
2. 用来描述 之前基本类型不太好描述的类型
3. 要使用时
a.用户先定义出 类型
b.用类型定义出 变量
数组
指针
//定义一个结构体类型
struct 结构体类型名
{
成员数据// 变量形式定义的
//成员变量
};
eg:
struct student
{
char name[20];
int sno;
int age;
float score;
}; //结构体类型 --- 描述学生信息的
//定义变量
struct student s; //定义了一个 学生这种类型 的变量
//结构体初始化
struct student s = {"Tom",110,18,98.5}; //挨个成员初始化,每个成员之间用逗号隔开
//引用结构体变量
结构体变量名.成员变量名
. 结构体成员运算符
访问到这个成员
s.name //访问s中name
注意:
1.结构体 传参时,一般都设计成指针形式
2.访问结构体成员
结构体类型变量.成员变量
结构体类型的指针->成员变量
练习:
准备三个学生的信息,
写个函数,
打印出成绩最高的学生的信息
内存对齐
32
目的 提高效率
结构体的对齐规则: //内存地址的对齐
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,
各自在自己的自然边界上对齐。
char -- 1字节
short -- 2字节
int -- 4字节
3.如果 成员变量中有比4字节大。
此时 整个结构体 按照4字节对齐。 //32位的平台
4.如果 成员变量中没有有比4字节大。
此时 整个结构体 按照最大的那个成员对齐。
//32位的平台
//如果有超过4字节 ,按照4字节对齐
//如果没有超过4字节的,则按成员变量中最大对齐
----------------------------------------------
//64位的平台 ---- 64位平台 整个结构体对齐, 按成员中最大的对齐
-----------------------------------------------