结构体:C语言中的精华

引言

在C语言中,结构体是一种非常常见的数据类型,可以将多个不同类型的数据封装成一个整体。结构体的应用范围非常广泛,例如在操作系统中用来表示进程,图形学中用来表示向量,还可以用在游戏开发中,表示游戏中的各种角色和物品等等。

结构体的定义

结构体的定义格式如下:

struct 结构体名{
    数据类型1 成员变量1;
    数据类型2 成员变量2;
    数据类型3 成员变量3;
    ...
};

其中,结构体名是自定义的标识符,成员变量可以有多个,每个成员变量的数据类型可以不同。

结构体的实例化

定义了结构体之后,我们可以根据结构体定义来创建结构体变量。

struct Person{
    char name[20];
    int age;
    float height;
};

int main(){
    struct Person p1;
    return 0;
}

上面的代码定义了一个结构体Person,包含了三个成员变量:name、age和height。在主函数中,我们创建了一个名为p1的结构体变量。

结构体的成员访问

访问结构体成员变量有两种方式:使用点运算符和使用箭头运算符。

点运算符

点运算符用于访问结构体变量中的成员变量,语法格式如下:

结构体变量名.成员变量名

比如我们要访问结构体变量p1中的age成员变量:

p1.age = 18;

箭头运算符

如果我们有一个指向结构体变量的指针,可以使用箭头运算符来访问结构体变量中的成员变量。

结构体指针->成员变量名

比如我们定义了一个指向p1的指针p2:

struct Person *p2 = &p1;
p2->age = 19;

上面的代码中,我们使用箭头运算符来访问p1中的age成员变量。

结构体的嵌套

结构体可以嵌套定义,嵌套的结构体可以有多层。

struct Student{
    char name[20];
    int age;
    struct Date{
        int year;
        int month;
        int day;
    } birthday;
};

int main(){
    struct Student s1;
    s1.birthday.year = 2000;
    s1.birthday.month = 1;
    s1.birthday.day = 1;
    return 0;
}

上面的代码中,我们定义了一个Student结构体,其中嵌套了一个Date结构体,表示学生的生日。在主函数中,我们创建了一个名为s1的结构体变量,然后使用点运算符和箭头运算符来访问s1中的birthday成员变量中的各个成员。

结构体:C语言中的精华

结构体的初始化

结构体变量可以通过以下几种方式进行初始化:

直接初始化

可以使用花括号对结构体变量进行初始化:

struct Person p1 = {"Tom", 18, 1.75};

按顺序初始化

如果不指定成员变量名,那么按照定义的顺序来初始化:

struct Person p2 = {"Jerry", 19};

上面的代码中,我们只给了前两个成员变量赋值,最后一个成员变量的值会被默认为0。

指定成员变量初始化

也可以通过指定成员变量名来初始化:

struct Person p3 = {.name="Mike", .age=20, .height=1.80};

结构体的应用

结构体的应用非常广泛,下面我们来看几个例子。

表示复数

我们可以使用结构体来表示复数:

struct Complex{
    double real;
    double imag;
};

struct Complex add(struct Complex x, struct Complex y){
    struct Complex z;
    z.real = x.real + y.real;
    z.imag = x.imag + y.imag;
    return z;
}

int main(){
    struct Complex a = {1.0, 2.0};
    struct Complex b = {3.0, 4.0};
    struct Complex c = add(a, b);
    return 0;
}

上面的代码中,我们定义了一个Complex结构体,包含了两个成员变量:real和imag,分别表示复数的实部和虚部。然后我们定义了一个add函数来对两个复数进行加法运算,最后在主函数中进行测试。

表示学生信息

我们可以使用结构体来表示学生信息:

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

void print(struct Student s){
    printf("%s %d %.1f\n", s.name, s.age, s.score);
}

int main(){
    struct Student s1 = {"Tom", 18, 90.5};
    struct Student s2 = {"Jerry", 19, 88.5};
    print(s1);
    print(s2);
    return 0;
}

上面的代码中,我们定义了一个Student结构体,包含了三个成员变量:name、age和score,分别表示学生的姓名、年龄和分数。然后我们定义了一个print函数来打印学生信息,最后在主函数中进行测试。

总结

结构体是C语言中非常重要的一种数据类型,可以将多个不同类型的数据封装成一个整体。结构体的应用范围非常广泛,可以用来表示复杂的数据结构,例如在操作系统中用来表示进程,图形学中用来表示向量,还可以用在游戏开发中,表示游戏中的各种角色和物品等等。

最后编辑于:2023/10/02作者: 心语漫舞