数组有助于存储一组相似数据类型的元素。但是,在某些情况下,我们必须将不同数据类型(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;
}

在这个 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 语言中的嵌套结构体
在这个程序中,我们将声明嵌套结构体(一个结构体在另一个结构体内部)。然后我们将用两种方式显示它们
- 创建一个结构体变量并为其赋相应的值(普通变量)
- 创建一个结构体指针变量并为其赋相应的值(指针变量)
在这个 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;
}

在结构体示例的 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 语句用于输出结构体变量中存在的每个成员。
嵌套结构体注意事项
- 要打印结构体变量,我们必须使用点运算符 (.)
- 要打印嵌套结构体变量,我们必须使用两个点运算符,例如 (变量.嵌套变量.成员)
- 打印指针变量时,我们必须使用箭头运算符而不是点运算符。(变量 -> 成员)
- 要使用指针打印嵌套变量,我们必须使用箭头运算符和点运算符的组合。(变量 -> 嵌套变量.成员)