C语言-结构体

1.1 简介

C 语言提供了struct关键字,允许自定义复合数据类型,将不同类型的值组合在一起。这样不仅为编程提供方便,也有利于增强代码的可读性。C 语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能。

结构体定义形式:

struct 结构体名{
    结构体所包含的变量或数组
};

struct name {
    int meowrain;
    int liming;
};

上面示例定义了一个名字的数据类型struct name,包含两个属性meowrainliming

注意,作为一个自定义的数据类型,它的类型名要包括struct关键字.

结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化

1.2 结构体变量

既然结构体是一种数据类型,那么就可以用它来定义变量。例如:

struct stu stu1, stu2;

定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。

在定义结构体的同时定义结构体变量:

struct stu{
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
} stu1, stu2;

如果只需要 stu1、stu2 两个变量,后面不需要再使用结构体名定义其他变量,那么在定义时也可以不给出结构体名,如下所示:

struct{  //没有写 stu
    char *name;  //姓名
    int num;  //学号
    int age;  //年龄
    char group;  //所在学习小组
    float score;  //成绩
} stu1, stu2;

1.3 结构体成员的获取和赋值

结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[ ]获取单个元素,结构体使用点号.获取单个成员。获取结构体成员的一般格式为:

结构体变量名.成员名;

#include <stdio.h>

int main(void) {
    struct example{
        char *name;//姓名
        int age;//岁数
        int group;//班级
    } stu1;
    //给结构体成员赋值
    stu1.name = "meowrain";
    stu1.age = 18;
    stu1.group = 200;

    //获取结构体成员的值
    printf("%s %d %d",stu1.name,stu1.age,stu1.group);
}

image-20220922214649104

简化写法:

#include <stdio.h>

int main(void) {
    struct example{
        char *name;//姓名
        int age;//岁数
        int group;//班级
    } stu1 = {"meowrain", 18, 200};    //给结构体成员赋值
    //获取结构体成员的值
    printf("%s %d %d", stu1.name, stu1.age, stu1.group);
}

不过整体赋值仅限于定义结构体变量的时候,在使用过程中只能对成员逐一赋值,这和数组的赋值非常类似。

还能这么写

#include <stdio.h>

int main(void) {
    struct example stu1{
        .name = 'meowrain';
        .age = 18;
        .group = 200;//班级
    };    //给结构体成员赋值
    //获取结构体成员的值
    printf("%s %d %d", stu1.name, stu1.age, stu1.group);
}

以下设置两个结构体变量

#include <stdio.h>

int main(void) {
    struct example{
        char *name;//姓名
        int age;//岁数
        int group;//班级
    } stu1 = {"meowrain", 18, 200}, stu2 = {"yyds", 19, 300};    //给结构体成员赋值
    //获取结构体成员的值
    printf("%s %d %d", stu1.name, stu1.age, stu1.group);
    printf("%s %d %d",stu2.name,stu2.age,stu2.group);
}