1.结构体
结构体是一些值的集合,这些值称为成员变量,结构体的每个值可以是不同类型的变量。
结构体变量的成员可以是标量,数组,指针,甚至是其他结构体。
结构体的声明:
//描述一个学生的一些数据
//姓名、年龄、电话、性别
//struct--结构体关键字 Stu--结构体标签 struct Stu--结构体类型
struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}s1, s2, s3;//s1 s2 s3是三个结构体全局变量
int main()
{
struct Stu s;//s是结构体局部变量
struct Stu s4 = {"张三", 20, "11111111111", "男"};//初始化
return 0;
}
结构体嵌套:
//嵌套结构体
struct S
{
int a;
char c;
char arr[20];
double d;
};
struct T
{
char ch[20];
struct S s;
char *p;
};
int main()
{
char arr[] = "hello world.";
struct T t = { "hello", {100, 'w', "hello boy", 3.14}, arr };
printf("%s\n", t.ch);
printf("%d\n", t.s.a);
return 0;
}
结构体访问和传参
//结构体访问和传参
struct Stu
{
char name[20];
short age;
char tele[12];
char sex[5];
};
void Print1(struct Stu tmp)
{
printf("%s\n", tmp.name);
printf("%d\n", tmp.age);
printf("%s\n", tmp.tele);
printf("%s\n", tmp.sex);
}
void Print2(struct Stu *p)
{
printf("%s\n", p->name);
printf("%d\n", p->age);
printf("%s\n", p->tele);
printf("%s\n", p->sex);
}
int main()
{
struct Stu s1 = { "张三", 20, "11111111111", "男" };
Print1(s1);
Print2(&s1);
return 0;
}
结构体体传参时,要传结构体的地址。因为函数传参时,参数是需要压栈的,如果传递一个结构体对象时,结构体过大,参数压栈的系统开销比较大,导致性能下降。