# 结构

> 原文： [https://www.programiz.com/c-programming/c-structures](https://www.programiz.com/c-programming/c-structures)

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

在 C 编程中，结构（或结构）是单个名称下的变量（可以是不同类型）的集合。

* * *

## 如何定义结构？

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

### `struct`的语法

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

```

这是一个例子：

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

```

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

* * *

## 创建结构变量

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

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

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

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

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

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

```

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

* * *

## 访问结构的成员

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

1.  `.` - 成员运算符
2.  `->` - 结构指针运算符（将在下一个教程中讨论）

假设您要访问`person2`的`salary`。 这是您的操作方法。

```c
person2.salary
```

* * *

### 示例：相加两个距离

```c
// Program to add two distances (feet-inch)
#include <stdio.h>
struct Distance
{
    int feet;
    float inch;
} dist1, dist2, sum;

int main()
{
    printf("1st distance\n");
    printf("Enter feet: ");
    scanf("%d", &dist1.feet);

    printf("Enter inch: ");
    scanf("%f", &dist1.inch);
    printf("2nd distance\n");

    printf("Enter feet: ");
    scanf("%d", &dist2.feet);

    printf("Enter inch: ");
    scanf("%f", &dist2.inch);

    // adding feet
    sum.feet = dist1.feet + dist2.feet;
    // adding inches
    sum.inch = dist1.inch + dist2.inch;

    // changing to feet if inch is greater than 12
    while (sum.inch >= 12) 
    {
        ++sum.feet;
        sum.inch = sum.inch - 12;
    }

    printf("Sum of distances = %d\'-%.1f\"", sum.feet, sum.inch);
    return 0;
}
```

**输出**

```c
1st distance
Enter feet: 12
Enter inch: 7.9
2nd distance
Enter feet: 2
Enter inch: 9.8
Sum of distances = 15'-5.7"
```

* * *

### 关键字`typedef`

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

**此代码**

```c
struct Distance{
    int feet;
    float inch;
};

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

```

**等同于**

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

int main() {
    distances d1, d2;
}

```

* * *

## 嵌套结构

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

```c
struct complex
{
 int imag;
 float real;
};

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

```

假设您要将`num2`变量的`imag`设置为 11，这是如何实现的：

```c
num2.comp.imag = 11;

```

* * *

## 为什么在 C 中使用结构？

假设您要存储有关一个人的信息：他/她的姓名，公民编号和薪水。 您可以创建不同的变量`name`，`citNo`和`salary`来存储此信息。

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

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

* * *

## 关于结构的更多

*   [结构和指针](/c-programming/c-structures-pointers)
*   [将结构传递给函数](/c-programming/c-structure-function)