结构体
-
为什么要有结构体
-
对于一个对象(实体),本身就有很多不同的属性,属性的类型也不一样,这就需要一种类型可以存储不同数据类型的属性(不同数据类型的组合),同时还需要数据的独立性(人与人的三维)
-
-
何为结构体
-
其他数据类型的集合的一种集合型数据类型
struct person {//struct代表声明结构体 //属性 //把struct person整体当作一个类型 char sex;//此处的char类型不是1个字节? int age;//由于内存对齐,按照最大的平均分成3块连续的空间 char* name; };
-
-
结构体特点
-
并没有实际的数据对象,而是一种自定义的数据类型
-
利用内存对齐追求速度即空间换时间(嵌入式则时间换空间)
-
-
结构体的初始化
struct person { char sex; int age; char* name; }; int a;//类比a的定义来来理解把(struct person)整体当作一种数据类型 struct person b;//声明结构体对象 b.age=20;//直接用.获取属性来初始化 struct person c={//在定义时初始化 '男', '20', 'Mike' }; struct person d={//同数组的指定初始化 .age=20 }
-
结构体的嵌套
struct cpu { int ALU; int Cache; }; struct control { int ALU; int Cache; }; struct computer {//结构体的嵌套 struct cpu cpu01; struct control con; }; //结构体嵌套赋值 用两个.获取属性 struct computer com; com.cpu01.ALU = 10;
-
结构体数组与结构体指针
struct person { char sex; int age; char* name; }; struct person a;//单个结构体对象(单个结构体类型的空间) struct person struct_array[10];//结构体数组 struct_array[0].age = 10;//结构体数组赋值 struct person *ptr;//结构体指针 ptr=&a;//指针指向a这个结构体类型的空间 ptr->age=10;//指针用ptr来获取属性
-
结构体数组struct_array[10]相当于开辟了10个连续空间的数组,每个空间存放的都是结构体
-
-
结构体与函数
void show(struct person*);//传结构体指针 void show1(const struct person);//直接传结构体 int main(){ struct person a; struct person *ptr; ptr=&a; show(ptr); show(&a);//Q1:要理解为啥c指针进去也一样 show1(b); return 0; } void show(struct person*a){ printf("%d\n",a->age); } void show1(const struct person a) { //const使传进去之后只读不能改 //const 数据保护 printf("%d\n", a.age);
-
可以直接传结构体或者用结构体指针接收地址(&a)
-
Q1-A1:指针
p
指向这个结构体a
说明p
存放了&a
,传指针p
进去函数相当于把&a
放给一个形式指针来保管
-