为什么使用结构体?

在C语言中,存在需要存储实体的多个属性的情况。并不是每个实体都只有一种类型的所有信息。它可以具有不同数据类型的不同属性。例如,一个实体"学生"可能有姓名(字符串)、学号(整数)、分数(浮点数)。为了存储与学生实体相关的此类信息,我们有以下几种方法:

  • 构造单独的数组来存储姓名、学号和分数。
  • 使用特殊的数据结构来存储不同数据类型的集合。

让我们详细了解第一种方法。

#include <stdio.h>
void main()
{
    char names[2][10], dummy; // 使用二维字符数组names来存储学生的姓名
    int roll_numbers[2], i;
    float marks[2];
    for (i = 0; i < 3; i++)
    {
        printf("Enter the name, roll number, and marks of student %d", i + 1);
        scanf("%s %d %f", &names[i], &roll_numbers[i], &marks[i]);
        scanf("%c", &dummy); // 在每次迭代中,将换行符存储在dummy字符中
    }
    printf("Printing the student details...\n");
    for (i = 0; i < 3; i++)
    {
        printf("%s %d %f\n", names[i], roll_numbers[i], marks[i]);
    }
}

输出

Enter the name, roll number, and marks of student 1: Arun 90 91        
Enter the name, roll number, and marks of student 2: Varun 91 56      
Enter the name, roll number, and marks of student 3: Sham 89 69

Printing the student details...
Arun 90 91.000000                                                                      
Varun 91 56.000000  
Sham 89 69.000000

上面的程序可以满足我们存储实体"学生"的信息的要求。然而,该程序非常复杂,并且随着输入的数量增加,复杂性也会增加。每个数组的元素被连续地存储,但并不是所有的数组都必须在内存中连续存储。C语言提供了另一种更简单的方法,可以使用一种特殊的数据结构,即结构体,在该数据结构中,可以将关于实体的所有不同数据类型的信息进行分组。

结构体是什么

在C语言中,结构体是一种用户自定义的数据类型,它使我们能够存储不同数据类型的集合。结构体的每个元素称为成员。结构体可以模拟类和模板的使用,因为它可以存储各种信息。

使用struct关键字来定义结构体。让我们看一下在C语言中定义结构体的语法。

struct structure_name
{
    data_type member1;
    data_type member2;
    .
    .
    data_type memeberN;
};

让我们看一个在C语言中为"员工"实体定义结构体的示例。

struct employee
{
    int id;
    char name[20];
    float salary;
};

下面的图示展示了在上面的示例中定义的结构体"employee"的内存分配。

1.png

这里,struct是关键字,employee是结构体的名称,idnamesalary是结构体的成员或字段。

声明结构体变量

我们可以声明一个结构体变量,以便可以轻松访问结构体的成员。有两种声明结构体变量的方式:

  1. 使用struct关键字在main()函数内部声明
  2. 在定义结构体时声明变量。

第一种方式:

让我们看一下使用struct关键字声明结构体变量的示例。它应该在main函数内部声明。

struct employee
{
    int id;
    char name[50];
    float salary;
};

现在将给定的代码写入main()函数内部。

struct employee e1, e2;

变量e1和e2可以用来访问结构体中存储的值。在这里,e1和e2可以像C++和Java中的对象一样对待。

第二种方式:

让我们看另一种在定义结构体时声明变量的方式。

struct employee
{
    int id;
    char name[50];
    float salary;
} e1, e2;

哪种方法更好

如果变量的数量不固定,请使用第一种方法。它为您提供了在main()函数中多次声明结构体变量的灵活性。

如果变量的数量是固定的,请使用第二种方法。这样可以节省在main()函数中声明变量的代码。

访问结构体的成员

有两种访问结构体成员的方式:

  1. 使用.(成员运算符或点运算符)
  2. 使用->(结构体指针运算符)

让我们看一下通过.(成员)运算符访问p1变量的id成员的代码。

p1.id

C结构体示例

让我们看一个在C语言中的结构体的简单示例。

#include<stdio.h>
#include<string.h>

struct employee
{
    int id;
    char name[50];
} e1; // 为结构体声明变量e1

int main()
{
    // 存储第一个员工的信息
    e1.id = 101;
    strcpy(e1.name, "Sonoo Jaiswal"); // 将字符串复制到字符数组中

    // 打印第一个员工的信息
    printf("Employee 1 ID: %d\n", e1.id);
    printf("Employee 1 Name: %s\n", e1.name);

    return 0;
}

输出:

Employee 1 ID: 101
Employee 1 Name: Sonoo Jaiswal

让我们看一个在C语言中存储多个员工信息的结构体的另一个示例。

#include<stdio.h>
#include<string.h>

struct employee
{
    int id;
    char name[50];
    float salary;
} e1, e2; // 为结构体声明变量e1和e2

int main()
{
    // 存储第一个员工的信息
    e1.id = 101;
    strcpy(e1.name, "Sonoo Jaiswal");
    e1.salary = 56000;

    // 存储第二个员工的信息
    e2.id = 102;
    strcpy(e2.name, "James Bond");
    e2.salary = 126000;

    // 打印第一个员工的信息
    printf("Employee 1 ID: %d\n", e1.id);
    printf("Employee 1 Name: %s\n", e1.name);
    printf("Employee 1 Salary: %f\n", e1.salary);

    // 打印第二个员工的信息
    printf("Employee 2 ID: %d\n", e2.id);
    printf("Employee 2 Name: %s\n", e2.name);
    printf("Employee 2 Salary: %f\n", e2.salary);

    return 0;
}

输出:

Employee 1 ID: 101
Employee 1 Name: Sonoo Jaiswal
Employee 1 Salary: 56000.000000
Employee 2 ID: 102
Employee 2 Name: James Bond
Employee 2 Salary: 126000.000000

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想