一.什么是结构体?
C 语言内置类型 例如:int / char / float 只能保存单一数据,而结构体(struct) 是一种自定义复合数据类型,可以把多个不同类型、相关联的数据当作一个整体。
比如描述一个学生:姓名、年龄、分数、性别,这些信息属于同一个对象,用结构体统一存放。
结构体的成员可以是:标量,数组,指针,甚至是结构体。
struct peo
{
char name[10];
int age;
char sex[5];
};
struct Stu
{
struct peo p;
int score;
char tele[20];
};
二.结构体语法定义及初始化
结构体语法定义
struct 结构体名 {
类型1 成员名1;
类型2 成员名2;
…
};
注意:不能缺少分号。
示例:定义学生结构体:
// 定义Student结构体类型
struct Stu {
char name[20]; // 姓名,字符数组
int age; // 年龄
float score; // 分数
char gender[5]; // 性别
};
这里的 struct Stu 是结构体类型。
这里还有匿名结构体(没有结构体名字,且只能当场使用):
struct {
int math;
int english;
} score;
初始化
struct peo
{
char name[10];
int age;
char sex[5];
};
int main()
{
struct peo p = {"zhangsan",19,"male"};
return 0;
}
结构体未完全初始化
struct Student s = {"小刚"};
未初始化部分自动初始化成0。
嵌套结构体初始化
struct peo
{
char name[10];
int age;
char sex[5];
};
struct Stu
{
struct peo p;
int score;
char tele[20];
};
int main()
{
struct Stu s = { {"zhangsan",19,"male"},20,"12366779087"};
return 0;
}
三.结构体成员访问
用 . 运算符
struct peo p = {"zhangsan",19,"male"};
printf("%s %d %s", p.name, p.age, p.sex);
字符串不能直接=赋值,要用strcpy
用 -> 运算符
struct peo p = { "zhangsan",19,"male" };
struct peo* adr = &p;
printf("%s %d %s", adr->name ,adr->age, adr->sex);
四.结构体传参
值传递
void print1(struct peo p)
{
printf("%s %d %s", p.name, p.age, p.sex);
}
地址传递
void print2(struct peo *p)
{
printf("%s %d %s", p->name, p->age, p->sex);
}




