C语言 结构体(上)
1.什么是结构体?
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]; };2.结构体语法定义及初始化
结构体语法定义
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; }3.结构体成员访问
用.运算符
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);4.结构体传参
值传递
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); }