在 C 编程中,struct(或 structure)是单个名称下的一组变量(可以是不同类型的)。
定义结构体
在可以创建结构体变量之前,需要定义其数据类型。要定义 struct,请使用 struct
关键字。
struct 的语法
struct structureName {
dataType member1;
dataType member2;
...
};
例如,
struct Person {
char name[50];
int citNo;
float salary;
};
这里,定义了一个派生类型 struct Person
。现在,可以创建此类型的变量。
创建 struct 变量
声明 struct
类型时,不分配任何存储或内存。要为给定结构类型分配内存并使用它,我们需要创建变量。
下面是创建结构体变量的方法
struct Person {
// code
};
int main() {
struct Person person1, person2, p[20];
return 0;
}
创建 struct
变量的另一种方法是
struct Person {
// code
} person1, person2, p[20];
在这两种情况下,
- person1 和 person2 是
struct Person
变量 - p[] 是一个大小为 20 的
struct Person
数组。
访问结构体的成员
有两种类型的运算符用于访问结构体的成员。
.
- 成员运算符->
- 结构体指针运算符(将在下一教程中讨论)
假设您想访问 person2 的 salary。方法如下。
person2.salary
示例 1:C 结构体
#include <stdio.h>
#include <string.h>
// create struct with person1 variable
struct Person {
char name[50];
int citNo;
float salary;
} person1;
int main() {
// assign value to name of person1
strcpy(person1.name, "George Orwell");
// assign values to other person1 variables
person1.citNo = 1984;
person1. salary = 2500;
// print struct variables
printf("Name: %s\n", person1.name);
printf("Citizenship No.: %d\n", person1.citNo);
printf("Salary: %.2f", person1.salary);
return 0;
}
输出
Name: George Orwell Citizenship No.: 1984 Salary: 2500.00
在此程序中,我们创建了一个名为 Person
的 struct
。我们还创建了一个名为 person1 的 Person
变量。
在 main()
中,我们为 person1 对象的 Person
中定义的变量赋了值。
strcpy(person1.name, "George Orwell");
person1.citNo = 1984;
person1. salary = 2500;
请注意,我们使用了 strcpy()
函数为 person1.name 赋值。
这是因为 name 是一个 char
数组(C 字符串),在声明字符串后,不能使用赋值运算符 =
来操作它。
最后,我们打印了 person1 的数据。
关键字 typedef
我们使用 typedef
关键字为数据类型创建别名。它通常与结构体一起使用,以简化声明变量的语法。
例如,让我们看一下以下代码
struct Distance{
int feet;
float inch;
};
int main() {
struct Distance d1, d2;
}
我们可以使用 typedef
来编写一个语法简化的等效代码
typedef struct Distance {
int feet;
float inch;
} distances;
int main() {
distances d1, d2;
}
示例 2:C typedef
#include <stdio.h>
#include <string.h>
// struct with typedef person
typedef struct Person {
char name[50];
int citNo;
float salary;
} person;
int main() {
// create Person variable
person p1;
// assign value to name of p1
strcpy(p1.name, "George Orwell");
// assign values to other p1 variables
p1.citNo = 1984;
p1. salary = 2500;
// print struct variables
printf("Name: %s\n", p1.name);
printf("Citizenship No.: %d\n", p1.citNo);
printf("Salary: %.2f", p1.salary);
return 0;
}
输出
Name: George Orwell Citizenship No.: 1984 Salary: 2500.00
在这里,我们将 typedef
与 Person
结构体一起使用,创建了一个别名 person
。
// struct with typedef person
typedef struct Person {
// code
} person;
现在,我们可以使用 person
别名简单地声明一个 Person
变量
// equivalent to struct Person p1
person p1;
嵌套结构体
在 C 编程中,您可以在结构体中创建结构体。例如,
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integers;
} num1, num2;
假设您想将 num2 变量的 imag 设置为 **11**。方法如下。
num2.comp.imag = 11;
示例 3:C 嵌套结构体
#include <stdio.h>
struct complex {
int imag;
float real;
};
struct number {
struct complex comp;
int integer;
} num1;
int main() {
// initialize complex variables
num1.comp.imag = 11;
num1.comp.real = 5.25;
// initialize number variable
num1.integer = 6;
// print struct variables
printf("Imaginary Part: %d\n", num1.comp.imag);
printf("Real Part: %.2f\n", num1.comp.real);
printf("Integer: %d", num1.integer);
return 0;
}
输出
Imaginary Part: 11 Real Part: 5.25 Integer: 6
C 语言中的结构体有什么用?
假设您想存储一个人的信息:姓名、公民身份号码和薪水。您可以创建不同的变量 name、citNo 和 salary 来存储此信息。
如果您需要存储多于一个人的信息怎么办?现在,您需要为每个人和每条信息创建不同的变量:name1、citNo1、salary1、name2、citNo2、salary2 等。
更好的方法是将所有相关信息集合在一个名为 Person
的结构体下,并为每个人使用它。