C 语言中的结构体

数组有助于存储一组相似数据类型的元素。但是,在某些情况下,我们必须将不同数据类型(int、float、char 等)组合在一起。C 编程语言引入了结构体(Structures 或 struct)的概念来处理这类情况。

struct 关键字用于在 C 语言中创建结构体。它们用于将不同的数据类型组合在一起,以便以结构化的方式组织数据。

例如,我们要存储员工的详细信息,如姓名、ID、年龄、地址和薪水。从这些名称中,您可以理解它们不是相同的数据类型。通常我们会为姓名、ID、地址、年龄和薪水创建单独的变量,但是如果要存储 5 名员工的这些信息呢?开发人员将很难为每个变量命名。因此,我们使用 struct 关键字创建一个编程结构体,并将其命名为 employee。

C 语言结构体 struct 语法

使用 struct 的结构体基本语法如下所示

struct St_Name
{
Data_Type Variable_Name;

Data_Type Variable_Name;

………….
};

C 语言中 struct 或结构体语法中的可用项

  • struct 是系统保留关键字,用于创建和访问结构体。
  • St_Name: 您希望赋予的名称。例如,employees、person、students。
  • Data_Type: 声明变量的数据类型。例如,int、float 和 char。
  • Variable_Name – 例如,id、name、age、salary。

struct 示例

struct Employee // Name = Employee

{
  int age; //Data_Type = int; Variable Name = age

  char name[50]; //Data Type = char Array; Variable_Name = name

  float salary; //Data Type = float; Variable Name = salary
};

在 C 语言中声明结构体

结构体内的成员在与变量关联之前不会占用任何内存位置。因此,我们必须在使用前创建结构体变量。我们可以通过多种方式声明结构体变量。

第一种方法

首先声明编程结构体,然后在 main 函数中创建结构体变量。

struct Employee
{
  int age;

  char name[50];

  float salary;
};

//Creating the Struct variable in main() function
struct Employee emp1, emp2;

emp1 = {25, “Dave”, 25000};

emp1 和 emp2 = struct 数据类型的变量。

第二种方法

我们在声明结构体时创建结构体变量。

struct Employee
{
  int age;

  char name[50];

  float salary;

} emp1, emp2;

访问 C 语言中结构体的成员

我们可以使用点 (.) 运算符或成员运算符来定位结构体成员。让我们使用上面的 struct 示例。

//Assigning the values

 emp2.age = 26;

 strcpy (emp2.name, “Michel”);

 emp2.salary = 46000.50;

C 语言结构体示例

在此示例程序中,我们声明了一个包含 5 个数据成员的结构体。接下来,我们将每个项目作为输出显示。

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

struct Employee 
{
  int Empolyee_ID;
  int age;  
  char Name[50];
  char Department[20];
  float Salary;
};

int main() 
{
  struct Employee emp1 = { 101, 25, "Dave", "IT", 25000.50 };
  struct Employee emp2;
  
     emp2.Empolyee_ID = 102;
     emp2.age = 28;
     strcpy(emp2.Name, "Christofer");
     strcpy(emp2.Department, "Science");
     emp2.Salary = 32000.70;

  printf(" Details of the Employee1 \n " );
  printf(" Employee Id = %d \n ", emp1.Empolyee_ID );
  printf(" Employee Age = %d \n ", emp1.age );
  printf(" Employee Name = %s \n ", emp1.Name );
  printf(" Employee Department = %s \n ", emp1.Department );
  printf(" Employee Salary = %.2f \n\n ", emp1.Salary );

  printf(" Details of the Employee1 \n " );
  printf(" Employee Id = %d \n ", emp2.Empolyee_ID );
  printf(" Employee Age = %d \n ", emp2.age );
  printf(" Employee Name = %s \n ", emp2.Name );
  printf(" Employee Department = %s \n ", emp2.Department );
  printf(" Employee Salary = %.2f \n ", emp2.Salary );

  return 0;
}
Struct or Structures in C Programming Example

在这个 C 结构体示例中,我们用适当的数据类型声明了一个包含 Empolyee_ID、age、Name、Department 和 Salary 成员的 Employee。请参阅 C 语言编程 中的 数组 文章。

在 main() 函数中,我们创建了 Employee 结构体变量 emp1 并为其赋值。

struct Employee emp1 = {101, 25, "Dave", "I T", 25000.50};

这意味着 emp1 结构体的值如下

Empolyee_ID = 103

age = 25

Name = Dave

Department = I T

Salary = 25000.50

我们创建了另一个 Employee 结构体变量 emp2。这次,我们使用成员运算符或点运算符 (.) 来根据数据类型指定值。printf 语句用于输出结构体变量中存在的每个成员。

注意:使用成员运算符,我们可以为 int 和 float 变量赋值。然而,对于字符串,我们只能使用字符串 strcpy 函数。

C 语言中的嵌套结构体

在上一节中,我们讨论了结构体,它非常适合组合不同数据类型的成员。但是,也存在一些问题,例如在结构体内列出过多的变量以及代码重复。为了解决这些情况,我们使用嵌套结构体。

嵌套结构体示例:假设我们正在处理员工、学生和个人数据。因此,我们想声明三个结构体,即 Employee、Student 和 Person。每一个都可能有不同的成员(例如:对于学生:学号、班级号、分数等)。但可能存在一些共同的成员,如年龄、门牌号、街道名和城市。将门牌号、街道名和城市成员添加到所有三个结构体中通常意味着重复性工作!

就像循环一样,C 语言中的嵌套结构体是结构体内部的结构体。使用这种方法,我们可以创建第一个名为 address 的结构体,并在其下添加门牌号、街道名和城市成员。我们可以从 Employee、Student 和 Person 结构体中调用这个 address 结构体。我们可以通过多种方式声明嵌套结构体。

嵌套第一种方法

在这种编程中声明嵌套 struct 的第一种方法是,声明 address 结构体,然后在 Employee 内部创建 address 变量。

声明 address 结构体

struct address
{
  int Door_Number;

  char Street_Name[20];

  char City[20];

  int Postcode;

} ;

这里,声明 Employee 结构体

struct Employee
{
  int age;

  char Name[50];

  char Department[20];

  struct address add; // creating the address variable = add

  float salary;

} ;

第二种方法

在这个嵌套结构体示例中,我直接在 Employee 结构体内部声明了 address 及其成员。

struct Employee
{
  int age;
  char Name[50];
  char Department[20];
  float salary;

  struct address // Declaring the address
   {
     int Door_Number;
     char Street_Name[20];
     char City[20];
     int Postcode;
   } add; // creating the address variable = add
};

显示 C 语言中的嵌套结构体

在这个程序中,我们将声明嵌套结构体(一个结构体在另一个结构体内部)。然后我们将用两种方式显示它们

  1. 创建一个结构体变量并为其赋相应的值(普通变量)
  2. 创建一个结构体指针变量并为其赋相应的值(指针变量)

在这个 C 嵌套结构体示例中,我们声明了 address 结构体,它包含 Door_Number(整数数据类型)和 City(20 字节的字符数组,或者说字符串)。

接下来,用适当的数据类型声明 Employee,包含 Age、Name、Salary 以及 address 的结构体变量和添加的成员。从下面的代码中,您可以观察到我们在声明 struct 时就创建了指针变量(即 *emp3)。

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

struct address
{
  int Door_Number;
  char City[20];
};

struct Employee
{
  int Age;
  char Name[50];
  struct address add;
  float Salary;  
}*emp3;

int main() 
{
  struct Employee emp1 = { 25, "Tutorial", 222, "Liverpool", 25000.50 };
  struct Employee emp2;
    
  emp2.Age = 28;
  strcpy(emp2.Name, "Gateway" );
  
  emp2.add.Door_Number = 145;
  strcpy(emp2.add.City, "Manchester" );
  
  emp2.Salary = 45000.00; 
  
  emp3 = &emp2;
  
  printf("\n Details of the Employee 1 \n " );
  printf(" Employee Age = %d \n ", emp1.Age );
  printf(" Employee Name = %s \n ", emp1.Name );
  printf(" Employee Door Number = %d \n ", emp1.add.Door_Number );
  printf(" Employee City = %s \n ", emp1.add.City );
  printf(" Employee Salary = %.2f \n\n ", emp1.Salary );

  printf(" Details of the Employee 2 \n " );
  printf(" Employee Age = %d \n ", emp3->Age );
  printf(" Employee Name = %s \n ", emp3->Name );
  printf(" Employee Door Number = %d \n ", emp3->add.Door_Number );
  printf(" Employee City = %s \n ", emp3->add.City );
  printf(" Employee Salary = %.2f \n ", emp3->Salary );
  
  return 0;
}
Nested Structures or struct Example

在结构体示例的 main() 函数中,我们创建了 Employee 结构体变量 emp1,然后为其赋值。

struct Employee emp1 = { 25, "Tutorial", 222, "Liverpool",25000.50 };

这意味着 emp1 的值如下。

Age = 25

Name = Tutorial

Door Number = 222 //address variable

City = Liverpool //address variable

Salary = 25000.50

创建了另一个变量 emp2。这次,我们使用成员运算符或点运算符 (.) 来根据数据类型赋值。

struct Employee emp2;

emp2.Age = 28;

我们必须使用 strcpy() 内置函数为字符串赋值。

strcpy(emp2.Name, "Gateway");

emp2.Salary = 45000.00;

Door Number 和 City 是 address 结构体的成员。因此,要访问它们,我们必须在 C 嵌套结构体中使用以下格式

变量.嵌套变量.成员

这里,变量是 emp2,嵌套变量是 addr,所以,

emp2.add.Door_Number = 145;

strcpy(emp2.add.City, "Manchester");

使用下面的语句将 emp2 的地址赋给变量 emp3

emp3 = &emp2;

Printf 语句用于输出结构体变量中存在的每个成员。

嵌套结构体注意事项

  1. 要打印结构体变量,我们必须使用点运算符 (.)
  2. 要打印嵌套结构体变量,我们必须使用两个点运算符,例如 (变量.嵌套变量.成员)
  3. 打印指针变量时,我们必须使用箭头运算符而不是点运算符。(变量 -> 成员)
  4. 要使用指针打印嵌套变量,我们必须使用箭头运算符和点运算符的组合。(变量 -> 嵌套变量.成员)