通知图标

欢迎访问津桥芝士站

基础篇01-5——结构体:自定义数据类型

来自AI助手的总结
C语言通过结构体创建复杂数据类型,并用函数处理,以综合存储如学生信息等多基础数据。

在C语言中,主要依赖于结构体(struct)来创建复杂的数据类型,并通过函数来处理这些数据结构。

为什么要引入这样一个概念?假设我们要存储一个学生的信息,我们可以从学生的姓名、性别、学号等信息入手,而这些信息就构成了一个学生,并指向了一个特定的学生,所以,引入一个能综合多个基础数据信息的数据类型就很必要。这在C语言中,称之为结构体

以下是一些关于如何在C语言中构造和初始化数据类型的技巧和步骤:

1. 定义结构体

结构体是C语言中用于构造复合数据类型的主要工具。一个结构体可以包含多个不同类型的数据项。大致的对于结构体的声明语法如下(对于一个结构体,必须有关键词struct,结构体名可以省略,其成员也可以一个都没有):

struct 结构体名{
    数据类型1 成员名称;
    数据类型2 成员名称;
    (类推)
} 变量名;

例如:

struct user{
    int id; 
    char gender; 
    float salary; 
} Employee;

我们声明了一个叫user的结构体,其成员有:idgendersalary,然后Employee就是变量名,称为结构体变量

2. 创建和使用结构体变量

当需要一个新的结构体实例时,先声明一个结构体变量,如果需要使用结构体变量中的某个成员时,需要使用使用这样的格式进行调用:

struct user{
    int id; 
    char gender; 
    float salary; 
} Employee;

printf("id = %d", Employee.id);

先写下结构体变量名,需要使用哪个成员,就直接加上”.“(英文状态下的小数点),跟上想要的成员名称就行了。即可完成对某个成员的引用。

3. 变量的声明注意事项

  1. 在结构体中,其成员不一定是一个基本的数据类型,也可以是结构体,共用体等。
  2. 对于结构体指针,在引用成员时应该使用“->”,一个箭头,而不再使用点号。
  3. 一个结构体变量同普通的变量,只是声明方式特殊而,绝大多数用于普通变量的方法同样适用于结构体变量。
  4. 在对一个结构体变量初始化的时候,不允许在结构内直接初始化变量,对于变量的初始化,允许使用列表进行结构体的初始化。

例如:

// 错误的初始化:
struct user{
    int a = 10;
    float b = 1.2;
} User;

// 正确的初始化:
struct user{
    int a;
    float b;
} user = { 10, 1.2 };

如果有多个成员,在列表中依次根据类型填写就行,每个不同的类型之间用英文”,”,分隔开即可。

下面是一个完整的C语言结构体使用示例,包括了结构体的定义、初始化、使用,以及一些常见操作。我们将依旧使用学生信息作为示例,结构体包含学生的姓名、性别和学号等信息。

示例代码

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

// 1. 定义结构体
struct Student {
    char name[50];   // 姓名
    char gender;     // 性别
    int id;         // 学号
    float gpa;      // 平均绩点
};

int main() 
{
    // 2. 创建和初始化结构体变量
    struct Student student1 = {"Alice", 'F', 1001, 3.85};
    struct Student student2 = {"Bob", 'M', 1002, 3.65};

    // 3. 使用结构体变量
    printf("学生信息:\n");
    printf("姓名:%s\n", student1.name);
    printf("性别:%c\n", student1.gender);
    printf("学号:%d\n", student1.id);
    printf("平均绩点:%.2f\n\n", student1.gpa);

    printf("学生信息:\n");
    printf("姓名:%s\n", student2.name);
    printf("性别:%c\n", student2.gender);
    printf("学号:%d\n", student2.id);
    printf("平均绩点:%.2f\n", student2.gpa);

    // 4. 修改结构体成员
    student1.gpa = 3.90; // 假设Alice提高了绩点

    // 5. 使用结构体指针
    struct Student *ptr = &student1;
    printf("\n修改后的学生信息:\n");
    printf("姓名:%s\n", ptr->name);
    printf("性别:%c\n", ptr->gender);
    printf("学号:%d\n", ptr->id);
    printf("平均绩点:%.2f\n\n", ptr->gpa);

    return 0;
}

代码解析

  1. 定义结构体

    struct Student {
        char name[50];   // 姓名
        char gender;     // 性别,使用字符类型
        int id;         // 学号
        float gpa;      // 平均绩点
    };

    我们定义了一个Student结构体,包含名字、性别、学号和平均绩点四个成员。

  2. 创建和初始化结构体变量

    struct Student student1 = {"Alice", 'F', 1001, 3.85};
    struct Student student2 = {"Bob", 'M', 1002, 3.65};

    我们声明并初始化了两个Student类型的变量student1student2

  3. 使用结构体变量: 使用printf函数打印结构体成员的信息,通过.运算符访问结构体的成员。

  4. 修改结构体成员: 我们将student1gpa修改为新的值,展示了如何更新结构体的成员。

请登录后发表评论

    没有回复内容