【C】struct 、struct 指针

发布时间:2024年01月12日

1 struct

结构体(Structures)是C语言中一种用户定义的复合数据类型,用于组合多个不同类型的变量,使其成为一个单一的实体。结构体提供了一种组织数据的方式,可以更灵活地表示复杂的数据结构。

1)定义

结构体的定义使用 struct 关键字,后面跟随结构体的名称和一对花括号,花括号中包含结构体的成员变量:

struct Point {
    int x;
    int y;
};

在这个例子中,定义了一个名为 Point 的结构体,它有两个成员变量 xy,均为整型。

2)声明和初始化

// 结构体的声明
struct Point;

// 结构体的初始化
struct Point p1 = {10, 20};
struct Point p2 = {.x = 5, .y = 15};

声明结构体时使用 struct Point;

初始化结构体时可以使用花括号初始化或者使用成员名指定初始化。

3)结构体成员的访问

结构体的成员可以使用点操作符 . 来访问:

cCopy code
int x_value = p1.x;
int y_value = p1.y;

4)结构体的 typedef:

使用 typedef 可以为结构体定义一个别名,方便后续的使用:

typedef struct Point {
    int x;
    int y;
} Point;

在这个例子中,Point 成为 struct Point 的别名,之后可以直接使用 Point 作为结构体的名称。

2 struct 指针

结构体指针是结构体相关知识中一个非常重要的概念,它允许通过指针访问结构体的成员,提供了更灵活的操作方式。

1)结构体指针的定义和初始化

结构体指针的定义和初始化与其他指针相似,可以通过使用结构体的类型声明指针:

struct Point {
    int x;
    int y;
};

struct Point p1 = {10, 20};
struct Point *ptr_p1 = &p1;  // 定义并初始化结构体指针

2)结构体指针的成员访问

通过结构体指针访问结构体的成员可以使用箭头运算符 ->

int x_value = ptr_p1->x;
int y_value = ptr_p1->y;

3)结构体指针作为函数参数

结构体指针经常作为函数参数,这样可以在函数内部直接修改结构体的内容:

void updatePoint(struct Point *ptr, int new_x, int new_y) {
    ptr->x = new_x;
    ptr->y = new_y;
}

// 在调用函数时传递结构体指针
updatePoint(&p1, 30, 40);

4)动态分配结构体指针

结构体指针经常与动态内存分配一起使用,使用 malloccalloc 分配内存,并将返回的指针赋给结构体指针:

struct Point *dynamic_p1 = (struct Point *)malloc(sizeof(struct Point));

// 使用动态分配的结构体指针
dynamic_p1->x = 50;
dynamic_p1->y = 60;

// 记得在不需要使用指针时释放内存
free(dynamic_p1);
文章来源:https://blog.csdn.net/weixin_44029896/article/details/135556697
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。