1. 结构体
关键字 struct
struct 结构体名字(首字母大写){
数据类型1 变量名1;
数据类型2 变量名2;
.....
};
//声明一个描述学生的结构体
//结构体中声明的变量一般叫做成员变量
struct Student { // 注意两个变量之间用分号分隔
char name[20];
char sex;
double number;
float score;
int age;
};
//定义一个结构体变量
// struct结构体名 变量名 = {初值};
//初值的顺序 需要跟声明时相同
匿名结构体:
struct{
int num;
char name[20];
char sex;
float score;
}stu1 = {1,”wukong”, ‘m’,99.5f},stu2 = {2, “bajie”, ‘m’, 65.0f};
取出结构体中成员变量的值
//结构体变量 . 成员变量 =值
注意:变量的数据类型,变量以前全是数据类型举例:结构体作为函数参数
void printStudent(structStudent stu);
//声明一个日期的结构体
struct Date{
int year;
int month;
int day;
};
// 声明一个家庭成员的结构体
struct Family{
char mother[20];
char father[20];
};
// 需求:描述一个名字与出生年月日和家庭成员
// 结构体仲可以有其他结构体作为成员变量
struct Person{
char name[20];// 结构体可以嵌套结构体
Date day;
Family family;
结构体变量可以直接进行赋值赋值的过程 是一个拷贝的过程
数组不能进行直接赋值 数组名字是首元素地址是常量 是程序运行期间不能改的
结构体在内存当中计算占多少字节:
1.计算的顺序由上自下依次计算
2.一个成员变量一个成员变量的计算
3.并且自动补齐为该结构体重所占最大字节的变量的字节数来进行补齐
例:如果结构体中 最大的是float就按4的倍数补齐哦最大的是double就按8的倍数补齐
#pragma pack(1)// 取消结构体自动补齐
为类型起别名:
使用关键字 typdeof老名字 新名字
// 使用teypedef定义结构体
struct student {
...
};
typedef struct student Student;
或者连在一起写
typedef struct student {
...
}Student;
2.结构体数组
struct Student stu1 = {"Faker", 'x', 1, 100, 18};
struct Student stu2 = {"Ryu",'x', 100, 60, 20};
struct Student stu3 = {"Wx",'x', 1, 95, 23};
struct Student studentArray = {stu1, stu2, stu3};