[toc]
结构体的定义方式
- 先定义结构体类型,再定义结构体变量
struct Person {
int age;
char *name;
double height;
};
struct Person person;
- 定义结构体类型的同时定义结构体变量
struct Person {
int age;
char *name;
double height;
} person;
person.age = 30;
printf("age = %i\n", person.age);
struct Person person;
person.name = "slj";
printf("name = %s\n", person.name);
- 定义结构体类型的同时定义结构体变量,并且省略结构体名称
- 如果在定义结构体类型的同事定义结构体变量,那么可以省略结构体类型名称
- 弊端:由于结构体类型没有名称,所以以后就不能使用该结构体类型
- 优点:如果结构体类型只需要使用一次,那么可以使用该方式
struct {
int age;
char *name;
double height;
} person;
person.age = 31;
printf("age = %i\n", person.age);
结构体的内存存储细节
- 内存寻址从大到小
- 存储的构造体元素从小到大
- 数组的地址就是数组首元素的地址
- 结构体的地址也是结构体的首元素地址
- 数组的名称也是数组的地址
- ==结构体的名称并不是结构体的地址==
注意:定义结构体类型并不会分配存储空间,只有定义结构体变量才会真正的分配内存空间
- 结构体分配存储空间的原则:
- 找到结构体类型中占用存储空间最大的属性,以后就按照该属性占用的存储空间的倍数来分配
- 会从第0个属性开始分配存储,如果存储空间不够就会重新分配,如果存储空间还有剩余,那么就会把后面的属性的数据存储到剩余的空间中
- 会从第0个属性开始分配存储,如果存储空间不够就会重新分配,并且会将当前属性的值直接存储到新分配的存储空间中,以前剩余的存储空间就不要了