1.普通结构体
- 结构体:自定义的一种数据类型 关键字:struct
struct 结构体名{
类型说明符 成员名;
…..
类型说明符 成员名;
}; - 赋初值:
struct 结构体名 变量名 = {初值}; - 结构体成员变量访问:
struct teacher{ // 结构体定义
char name[20];
char gender;
int age;
char major[10];
};
struct teacher stu1 = {"balabala", 'f', 28, "iOS"};
stu1.name = "zhangsan"; // 结构体成员变量的访问及赋值
stu2.age = 32; // 访问:-----结构体变量名.成员变量名-----
2.匿名结构体
- 结构体的声明与变量定义组合在一起:
struct {
int number;
int age;
}
stu1 = {1, 23}
stu2 = {2, 34];
typedef:定义类型
oc中:
typedef int Integer; // 之后的int类型数据定义时,可以使用Integer替换
struct student{
int number;
int age;
}
typedef struct student Student; // 将结构体struct student定义为Student
typedef struct student {
char name[20];
int number;
int age;
float score;
}Student; // 起别名
2.结构体内存占用:
结构体成员变量,从上至下存储,从第一个开始
存储规则:按各种数据类型的倍数存储,如果被占用,向下延续
总空间的字节数 = 最大类型变量字节数的最小整数倍
例:
int a;
double b;
char c;
int d;
char e; // 需要分配32字节的空间
解释:
a: 0–3
b: 8–15 因为b是double型数据,所以要找8的倍数存储b
c: 16
d:20–23
e: 24 总共占用25个字节,double(8)的倍数:24,32 因为25>24 所以补齐到32各字节0—-31
3.结构体嵌套使用:
typedef struct birthday{
int year;
int month;
int day;
}Birthday;
typedef struct person{
char name[20];
int age;
float high;
float weight;
char gender;
Birthday date; // 结构体嵌套 访问:结构体变量名.date.year
}Person;
3.结构体数组
- 定义:
typedef struct student{
char name[20];
int age;
char gender;
float score;
}Student;
Student stu[5] = { {...}, {...}, {...}, {...}, {...} };