结构体(Structures)是C语言中一种用户定义的复合数据类型,用于组合多个不同类型的变量,使其成为一个单一的实体。结构体提供了一种组织数据的方式,可以更灵活地表示复杂的数据结构。
结构体的定义使用 struct
关键字,后面跟随结构体的名称和一对花括号,花括号中包含结构体的成员变量:
struct Point {
int x;
int y;
};
在这个例子中,定义了一个名为 Point
的结构体,它有两个成员变量 x
和 y
,均为整型。
// 结构体的声明
struct Point;
// 结构体的初始化
struct Point p1 = {10, 20};
struct Point p2 = {.x = 5, .y = 15};
声明结构体时使用 struct Point;
初始化结构体时可以使用花括号初始化或者使用成员名指定初始化。
结构体的成员可以使用点操作符 .
来访问:
cCopy code
int x_value = p1.x;
int y_value = p1.y;
使用 typedef
可以为结构体定义一个别名,方便后续的使用:
typedef struct Point {
int x;
int y;
} Point;
在这个例子中,Point
成为 struct Point
的别名,之后可以直接使用 Point
作为结构体的名称。
结构体指针是结构体相关知识中一个非常重要的概念,它允许通过指针访问结构体的成员,提供了更灵活的操作方式。
结构体指针的定义和初始化与其他指针相似,可以通过使用结构体的类型声明指针:
struct Point {
int x;
int y;
};
struct Point p1 = {10, 20};
struct Point *ptr_p1 = &p1; // 定义并初始化结构体指针
通过结构体指针访问结构体的成员可以使用箭头运算符 ->
:
int x_value = ptr_p1->x;
int y_value = ptr_p1->y;
结构体指针经常作为函数参数,这样可以在函数内部直接修改结构体的内容:
void updatePoint(struct Point *ptr, int new_x, int new_y) {
ptr->x = new_x;
ptr->y = new_y;
}
// 在调用函数时传递结构体指针
updatePoint(&p1, 30, 40);
结构体指针经常与动态内存分配一起使用,使用 malloc
或 calloc
分配内存,并将返回的指针赋给结构体指针:
struct Point *dynamic_p1 = (struct Point *)malloc(sizeof(struct Point));
// 使用动态分配的结构体指针
dynamic_p1->x = 50;
dynamic_p1->y = 60;
// 记得在不需要使用指针时释放内存
free(dynamic_p1);