C语言——struct结构体

1.什么是结构体

struct 结构体是 C 语言中的一种用户自定义的数据类型,可以用于组合多个不同类型的变量为一个实体,并以此为基础定义新的数据类型。关键字为struct,正如其名称所示,结构体通过将相关的变量组合在一起来创建一个结构,以便更好地组织和操作数据。

结构体和其他类型基础数据类型一样,例如int类型,char类型只不过结构体可以做成你想要的数据类型。以方便日后的使用。

2.定义结构体

定义 struct 的一般语法如下

struct 结构体名称 {
    类型 成员1;
    类型 成员2;
    // 更多成员定义
};

举个栗子~

下面演示一个简单的学生结构体的定义,包括学号、姓名和成绩:

struct Student {
    int id;
    char name[50];
    float score;
};

在该示例中,我们定义了一个名为 Student 的结构体,它包含了学生的学号、名字和成绩,分别是整型、字符数组和浮点数类型。

3.结构体的实际应用

#include <stdio.h>

// 定义学生结构体
struct Student {
    int id;
    char name[50];
    float score;
};

int main() {
    // 声明并初始化一个学生结构体变量
    struct Student student1 = {12345, "Alice", 85.5};

    // 访问结构体成员并打印信息
    printf("学生信息:\n");
    printf("学号: %d\n", student1.id);
    printf("姓名: %s\n", student1.name);
    printf("成绩: %.2f\n", student1.score);

    return 0;
}

3.结构体有什么优点

结构体的存在意义是为了更好地组织复杂的数据,使代码更清晰、模块化和易于维护,也就是将不同的数据类型打包、封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。

4.适用于什么场景

  1. 表示实体:结构体可用于表示真实世界中的实体,如学生、员工、订单等。通过将相关的属性组合在一起,我们可以更容易地描述和操作这些实体的数据。
  2. 组织复杂数据结构:结构体可以用于组织复杂的数据结构,如链表、树等。通过将结构体嵌套和组合,我们可以创建层次结构或复杂的数据结构来处理更大规模的数据。
  3. 模块化编程:结构体帮助我们创建模块化的代码。通过将相关的数据和功能组合在一起,我们可以更轻松地维护代码并扩展功能。例如,一个学生结构体可以包含所有与学生相关的数据和操作函数,使代码更易读和维护。
  4. 传递多个关联数据:结构体允许我们一次性传递多个关联的数据项。当需要在函数之间传递多个相关的数据时,可以使用结构体作为参数,提高代码的可读性和可维护性。

5.结构体的空间分配

在C语言中,结构体(struct)占用的内存空间取决于其内部包含的成员变量的大小和对齐方式。对于一个结构体来说,其内存大小将是其各个成员变量所占内存大小的总和,再加上由于对齐所增加的填充字节

举个栗子~

struct Example {
    int a;
    char b;
    double c;
};
struct Example Example1;

int main() {
    printf("Example %d\n", sizeof(Example1.a));
    printf("Example %d\n", sizeof(Example1.b));
    printf("Example %d\n", sizeof(Example1.c));
    printf("Example %d\n", sizeof(Example1));
    return 0;
}

打印结果:

Example 4
Example 1
Example 8
Example 16

[Done] exited with code=0 in 2.824 seconds

理论上来说,结构体的大小应该是 4+1+8=13才对,为什么是16呢,这就是因为采用了4字节对齐的方式。

什么是字节对齐?

对齐方式是计算机系统中用来确定数据存储地址的规则,它确保数据在内存中以特定的边界开始存储。简而言之,对齐方式是指数据对象存储时所采用的地址对齐策略。比如每个数据的起始地址都是4的倍数,这就是4字节对齐,依次类推。

对齐方式是为了优化CPU对内存的访问,因为许多处理器在访问未对齐数据时需要额外的指令来处理,这会降低访问速度。通过对数据进行适当的对齐,可以最大程度地减少这种性能开销,提高程序的执行效率。

6.结构体指针

直接举栗~

#include <stdio.h>
#include <string.h>

// 定义结构体
struct Person {
    int age;
    char name[20];
};

int main() {
    // 声明结构体指针
    struct Person *personPtr;

    // 为结构体指针分配内存
    personPtr = (struct Person *)malloc(sizeof(struct Person));

    // 操作结构体指针所指向的结构体
    personPtr->age = 25;
    strcpy(personPtr->name, "Alice");

    // 输出结构体指针所指向的结构体的成员值
    printf("姓名:%s\n", personPtr->name);
    printf("年龄:%d\n", personPtr->age);

    // 释放分配的内存
    free(personPtr);

    return 0;
}

7.结构体总结

结构体(struct)是 C 语言中的一种自定义数据类型,用于将不同类型的数据组合成一个整体。总结结构体的关键要点如下:

  1. 结构体用 struct 关键字定义,由多个不同类型的成员组成,每个成员可以有自己的数据类型和名称。

  2. 结构体变量可以在定义时初始化,也可以在之后分别初始化其成员。

  3. 结构体变量的访问使用点操作符 .,指向结构体的指针变量的访问使用箭头操作符 ->

  4. 结构体可以作为函数的参数传递,也可以作为函数的返回值,从而方便地处理和操作复杂的数据结构。

  5. 结构体允许以更直观的方式表示复杂的数据,提高了程序的可读性和灵活性。

结构体在 C 语言中被广泛应用于各种场景,例如表示员工、学生、图书等实体,以及构建复杂的数据结构,如链表、树等。通过合理地使用结构体,可以更好地组织和处理程序中的数据。

注:结构体常常与typedef结合使用,这样会更方便,typedef会在下章更新~~~

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值