C 语言结构体(struct)

在本教程中,您将学习C语言编程中的结构类型。您将借助示例学习定义和使用结构。

在C语言编程中,有时需要存储实体的多个属性。 实体不必仅具有一种类型的所有信息。 它可以具有不同数据类型的不同属性。

如何定义结构?

在创建结构变量之前,需要定义其数据类型。要定义结构,请使用struct关键字。

struct的语法

struct structureName 
{
    dataType member1;
    dataType member2;
    ...
};

这是一个实例:

struct Person
{
    char name[50];
    int citNo;
    float salary;
};

在此,struct Person定义派生类型。现在,您可以创建这种类型的变量。

创建结构变量

声明结构类型时,不会分配任何存储或内存。要分配给定结构类型的内存并使用它,我们需要创建变量。

这是我们创建结构变量的方法:

struct Person
{
    char name[50];
    int citNo;
    float salary;
};

int main()
{
    struct Person person1, person2, p[20];
    return 0;
}

创建结构变量的另一种方法是:

struct Person
{
    char name[50];
    int citNo;
    float salary;
} person1, person2, p[20];

在这两种情况下,都会创建两个变量person1,person2和具有20个类型为struct Person类型的元素的数组变量p。

访问结构的成员

有两种类型的运算符用于访问结构的成员。

  • . - 成员运算符

  • -> -结构指针运算符(将在下一个教程中讨论)

假设,你要访问结构体person2的salary。可以使用一下操作方法。

person2.salary

示例:两个距离相加

// 程序相加两个距离(米-厘米)
#include <stdio.h>
struct Distance
{
    int feet;
    float inch;
} dist1, dist2, sum;

int main()
{
    printf("第一段距离\n");
    printf("输入米: ");
    scanf("%d", &dist1.feet);

    printf("输入厘米: ");
    scanf("%f", &dist1.inch);
    printf("第二段距离\n");

    printf("输入米: ");
    scanf("%d", &dist2.feet);

    printf("输入厘米: ");
    scanf("%f", &dist2.inch);

    // 米相加
    sum.feet = dist1.feet + dist2.feet;
    // 厘米相加
    sum.inch = dist1.inch + dist2.inch;

    // 如果厘米大于100,换算为米
    while (sum.inch >= 100) 
    {
        ++sum.feet;
        sum.inch = sum.inch - 100;
    }

    printf("距离总和 = %d米%.1f厘米", sum.feet, sum.inch);
    return 0;
}

输出结果

第一段距离
输入米: 32
输入厘米: 59.9
第二段距离
输入米: 12
输入厘米: 78.5
距离总和 = 45米38.4厘米

typedef 关键字

我们使用typedef关键字为数据类型创建别名。它通常与结构一起使用,以简化声明变量的语法。

此代码

struct Distance{
    int feet;
    float inch;
};

int main() {
    struct Distance d1, d2;
}

等同于

typedef struct Distance{
    int feet;
    float inch;
} distances;

int main() {
    distances d1, d2;
}

嵌套结构

您可以在C语言编程中的结构内创建结构。例如,

struct complex
{
 int imag;
 float real;
};

struct number
{
   struct complex comp;
   int integers;
} num1, num2;

假设,你要设置num2的变量imag值为11,怎么做呢?看下面示例:

num2.comp.imag = 11;

为什么在C中使用结构?

假设您要存储有关一个人的信息:他/她的姓名,身份证号和薪水。您可以创建不同的变量name,citNo和salary存储此信息。

如果您需要存储多个人的信息怎么办?现在,你需要为每个人每个信息创建不同的变量:name1,citNo1,salary1,name2,citNo2,salary2, 等。

更好的方法是在单个名称Person结构下收集所有相关信息,并将其用于每个人。

更多关于结构