1. 结构体基础概念与定义方式
结构体是C语言中最重要的复合数据类型之一,它允许我们将不同类型的数据组合成一个有机的整体。想象一下,如果你要描述一本书,需要记录书名、作者、价格等信息,用基本数据类型需要多个变量,而结构体可以完美地将这些信息封装在一起。
1.1 结构体的基本语法
结构体定义使用struct关键字,基本格式如下:
c复制struct 结构体标签 {
类型 成员1;
类型 成员2;
// 更多成员...
} 变量列表;
这里有一个实际的图书结构体例子:
c复制struct Book {
char title[50];
char author[50];
float price;
int pages;
};
这个结构体定义了四个成员:书名(title)、作者(author)、价格(price)和页数(pages)。注意结构体定义末尾的分号不可省略。
1.2 结构体的多种定义方式
C语言提供了多种定义结构体的灵活方式:
- 标准定义方式(先定义类型再声明变量):
c复制struct Student {
char name[20];
int age;
};
struct Student stu1, stu2;
- 定义时直接声明变量:
c复制struct Point {
int x;
int y;
} p1, p2;
- 匿名结构体(省略标签名):
c复制struct {
char model[20];
float price;
} phone1, phone2;
- 使用typedef创建新类型:
c复制typedef struct {
char name[30];
int id;
} Employee;
Employee emp1; // 无需再写struct关键字
提示:typedef方式在实际开发中最常用,因为它简化了代码,使类型名更简洁。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 结构体变量的初始化与访问
2.1 结构体变量的初始化
结构体变量可以在声明时初始化,也可以在后续代码中赋值:
c复制// 声明时初始化
struct Book book1 = {
"C Programming",
"K&R",
59.9,
300
};
// 先声明后赋值
struct Book book2;
strcpy(book2.title, "Effective C");
strcpy(book2.author, "Robert C. Martin");
book2.price = 45.0;
book2.pages = 256;
对于复杂结构体,可以使用指定初始化器(C99标准):
c复制struct Point pt = { .y = 10, .x = 20 }; // 可以不按成员顺序初始化
2.2 访问结构体成员
访问结构体成员使用点运算符(.):
c复制printf("Book title: %s\n", book1.title);
printf("Price: %.2f\n", book1.price);
// 修改成员值
book1.price = 49.9;
对于结构体指针,使用箭头运算符(->)访问成员:
c复制struct Book *ptr = &book1;
printf(
