C 结构体

  • Post category:C

下面是关于C结构体(Struct)的完整使用攻略。

结构体简介

在C语言中,结构体(Struct)是一种自定义类型,可以包含多个不同类型的成员变量,这些成员变量可以是任何基本数据类型、数组、指针等类型,相当于是一种用户自己定义的复合数据类型。通过结构体,我们可以方便地组织具有一定逻辑关系的数据,也可以通过结构体实现面向对象的编程思想。

定义结构体

结构体的定义语法如下:

struct 结构体名 {
   类型 成员名1;
   类型 成员名2;
   //...
} 应用范围;

其中应用范围是可选的,表示结构体的作用范围。如果省略应用范围,则默认作用范围为当前文件。

下面是一个示例:

struct Student {
    char name[20];
    int age;
    float score;
} stu;

表示定义了一个Student结构体,包含了成员变量name(字符数组类型)、age(整型)、score(浮点型),并且定义了一个stu变量。

使用结构体

定义结构体变量

要定义一个结构体变量,可以按如下方式:

struct Student stu = {"Tom", 18, 89.5}; //也可以用stu.name = "Tom";来修改name变量的值

表示定义了一个Student类型的变量stu,并初始化其成员变量为name="Tom"age=18score=89.5

访问结构体成员变量

要访问结构体成员变量,可以用.来连接结构体变量和成员变量名,例如:

printf("%s %d %.1f\n", stu.name, stu.age, stu.score);

表示输出stu变量的成员变量。

结构体数组

结构体数组与普通数组类似,但数组中的每个元素都是一个结构体变量。定义结构体数组的语法如下:

struct Student stuArr[3] = {
    {"Tom", 18, 89.5},
    {"Jerry", 17, 90.0},
    {"Lucy", 19, 85.5}
};

上述语句表示定义了一个类型为Student、长度为3的数组stuArr,并且初始化了三个Student类型的结构体。

结构体指针

结构体指针也和普通指针类似,用于指向某个结构体变量的地址。定义结构体指针的语法如下:

struct Student *p = &stu;

其中的p就是一个Student类型的结构体指针,指向stu结构体变量的地址。

动态分配结构体变量内存

和普通变量一样,结构体变量也可以使用malloc()函数来动态分配内存,例如:

struct Student *p = (struct Student *)malloc(sizeof(struct Student));

上述语句表示分配了一个Student类型结构体所需的内存,并将其地址赋给指针p

下面是一个示例:

#include <stdio.h>
#include <stdlib.h>

struct Student {
    char name[20];
    int age;
    float score;
};

int main() {
    struct Student stu = {"Tom", 18, 89.5};
    printf("%s %d %.1f\n", stu.name, stu.age, stu.score); //输出结构体成员变量

    struct Student *p = &stu;
    printf("%s %d %.1f\n", p->name, p->age, p->score); //指针访问结构体成员变量

    struct Student stuArr[3] = { //结构体数组
        {"Tom", 18, 89.5},
        {"Jerry", 17, 90.0},
        {"Lucy", 19, 85.5}
    };
    for (int i=0; i<3; i++) {
        printf("%s %d %.1f\n", stuArr[i].name, stuArr[i].age, stuArr[i].score);
    }

    struct Student *p2 = (struct Student *)malloc(sizeof(struct Student)); //动态分配结构体变量内存
    p2->age = 20;
    printf("%d\n", p2->age);
    free(p2); //释放内存

    return 0;
}

上述示例中,我们定义了一个Student类型的结构体,定义了结构体变量、指针、数组,还通过malloc()函数动态分配了一个结构体变量的内存,并释放了该内存。