结构体
1.结构体类型的声明 2.结构体初始化 3.结构体成员访问 4.结构体传参
结构体:结构的成员可以是不同类型的变量,用于描述复杂对象。
1.结构体的声明
struct tag { member - list; }variable-list;
描述一个人
姓名+年龄+性别+电话号
struct People { char name[20]; int age; char sex[10]; char tele[12]; };
2.结构体的初始化
用结构体类型去创建变量,并赋以初值
#include<stdio.h> struct People { char name[20]; int age; char sex[10]; char tele[12]; }; int main() { //创建结构体变量P struct People P = { "crush",20,"男","12345665421" };//初始化 return 0; }
3.结构体成员访问
两种方式
1.结构体.成员名 2.结构体指针->成员名
1.结构体.成员名
#include<stdio.h> struct People { char name[20]; int age; char sex[10]; char tele[12]; }; void Print1(struct People P) { printf("%s\n", P.name); printf("%d\n", P.age); printf("%s\n", P.sex); printf("%s\n", P.tele); } int main() { struct People P = { "crush",20,"男","12345665421" }; Print1(P); return 0; }
2.结构体指针->成员名
#include<stdio.h> struct People { char name[20]; int age; char sex[10]; char tele[12]; }; void Print2(struct People*ps) { printf("%s\n", ps->name); printf("%d\n", ps->age); printf("%s\n", ps->sex); printf("%s\n", ps->tele); } int main() { struct People P = { "crush",20,"男","12345665421" }; Print2(&P); return 0; }
4.结构体传参
#include<stdio.h> struct People { char name[20]; int age; char sex[10]; char tele[12]; }; void Print1(struct People P) { printf("name=%s age=%d sex=%s tele=%s\n",P.name,P.age,P.sex,P.tele); } void Print2(struct People*ps) { printf("name=%s age=%d sex=%s tele=%s\n", ps->name,ps->age,ps->sex,ps->tele); } int main() { struct People P = { "crush",20,"男","12345665421" }; Print1(P); Print2(&P); return 0; }
总结:因为函数传参时,参数需要压栈;
如果传递结构体对象时,结构体过大,参数压栈所开辟的空间较大,会造成空间浪费,性能也会有所下降
结论:结构体传参时,应该传结构体的地址