0. 概念
- 理解:用来保存一组
不同类型数据
的抽象格式:struct 结构体类型名称 { 属性; }; struct Person { char *name; int age; double height; };
1. 定义
- 形式
1. 先定义结构体类型,再定义结构体变量 struct Person { char *name; int age; double height; }; struct Person sp; 2. 定义结构体类型同时定义结构体变量 struct Person { char *name; int age; double height; } sp; 3. 定义结构体类型同时定义结构体变量,省略结构体类型名称 struct { char *name; int age; double height; } sp;
2. 初始化
- 形式
1. 先定义结构体变量,再逐个初始化 struct Person { char *name; int age; double height; } sp; sp.name = "wxx"; sp.age = 18; sp.height = 2.00; printf("name = %s, age = %i, height = %lf\n", sp.name, sp.age, sp.height); 2. 先定义结构体变量,再一次性初始化 struct Person { char *name; int age; double height; } sp; sp = (struct Person){"wxx", 18, 2.00}; printf("name = %s, age = %i, height = %lf\n", sp.name, sp.age, sp.height); 3. 定义结构体变量同时初始化 struct Person { char *name; int age; double height; }; struct Person sp = {"wxx", 18, 2.00}; printf("name = %s, age = %i, height = %lf\n", sp.name, sp.age, sp.height); 4. 定义结构体变量同时将数据赋值给指定属性 struct Person { char *name; int age; double height; } sp = {.name = "wxx", .age = 18, .height = 2.00}; printf("name = %s, age = %i, height = %lf\n", sp.name, sp.age, sp.height);
3. 内存分配
- 地址:
结构体变量地址
==第 0 个属性地址
- 存储细节
1. 先存储第 0 个属性,再依次存储其他属性 2. 先开辟一块属性中 占用内存最大 的存储空间存储数据 3. 如果剩余存储空间 不够 存储将要存储的数据,那么就会重新开辟一块和 第一次同样大小的存储空间, 并且将需要存储的数据放到新开辟的存储空间中 4. 如果剩余存储空间 够 存储将要存储的数据,那么不会开辟新的存储空间
- 示例
struct Person { char c; // 1 int age; // 4 double height; // 8 }; struct Person sp; printf("size = %lu\n", sizeof(sp)); struct Dog { int age; // 4 double height; // 8 char c; // 1 }; struct Dog dp; printf("size = %lu\n", sizeof(dp));
网友评论