2024-09-18 - 笔记 -14
作者(Author): 仟墨(网名)
结构体
结构体是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。
结构体的声明(重要)
自己起的名字,为了方便记忆和复盘,并不是规范的名字
-
直接使用法(只能使用一次)
不写结构体名,只写结构体变量,所以只能使用一次
struct { char name[20]; char sex[10]; }BB;//BB 为机构体变量名
-
直接声明法 (结构体可以使用多次,或者叫类型可以使用多次)
写机构体名,所以后续想继续使用此机构体类型,仍可以定义此类型的结构体变量
struct AA //AA 为机构体名 { char name[20]; char sex[10]; }; struct AA BB, CC; //BB 和 CC就是机构体变量名
-
直接定义法
声明结构体的同时也声明了结构体变量名。
struct AA //AA 为机构体名 { char name[20]; char sex[10]; }ABC; struct AA BB, CC; //BB 和 CC就是机构体变量名,ABC 也是结构体变量名
-
类型定义法
typedef struct AA //AA 为结构体名 { char name[20]; char sex[10]; }ABC;//重新命名,可以想成 ABC 代替了 struct AA,方便后期使用。 //此时这里的ABC就不是结构体变量了,而是将结构体类型重新写了一个名字,方便使用,否则每次定义机构体变量都要写struct AA,这样再次定义结构体变量就可以直接使用ABC作为类型了。 struct AA BB, CC; ABC BB, CC;//效果与struct AA BB, CC;相同
结构体成员的访问
-
普通访问
struct AA { char name[20] = "ZLH"; char sex[10] = "男"; }BBB; printf("name: %s, Sex: %s\n", BBB.name, BBB.sex);
-
指针访问(重要)
struct AA { char name[20] = "ZLH"; char sex[10] = "男"; }BBB, *p = &BBB; printf("name: %s, Sex: %s\n", BBB.name, BBB.sex); printf("name: %s, Sex: %s\n", p -> name, p -> sex);
结构体变量 作为 函数参数 (重要) 容易生疏
void print1(struct Peo P)//正常传
{
printf("%s, %s", p.name, p.sex);
}
void print2(struct Peo *P)//正常传
{
printf("%s, %s", p->name, p->sex);
}
struct AA
{
char name[20] = "ZLH";
char sex[10] = "男";
}BBB;
print1(BBB);//传整个结构体成员
print2(&BBB);//传结构体变量地址
-
正常传 - 结构体传
如果成员过多,可能会浪费空间,因为函数形参是实参的临时拷贝,所以学要临时开辟新的空间来存储数据,就会造成空间的不合理利用,导致浪费。传地址就会避免这种情况,只会传一个指针变量的大小,(指针变量大小: 32位的地址是4字节,64位的地址是8字节),这样子占用的空间就可能小了很多了。
这样其实是把整个结构体成员全都传过来了,不是传的地址。
void print1(struct Peo P)//正常传 { printf("%s, %s", p.name, p.sex); }
-
传地址 - 结构体的地址传【推荐方法】
void print2(struct Peo *P)//传地址 { printf("%s, %s", p->name, p->sex); }