跳到主要内容

C 语言结构体

提示
  1. 定义和创建结构体:在C语言中,通过struct关键字定义结构体(一组不同类型的变量集合),然后创建相应的结构体变量。
  2. 访问和操作成员:使用.操作符来访问结构体的成员;例如,person2.salary访问person2的工资。
  3. typedef和嵌套结构体:使用typedef为结构体类型创建别名,简化变量声明;结构体可嵌套定义,如结构体内部包含另一个结构体。

在C编程中,结构体(struct)是在单个名称下集合了多个变量(可以是不同类型)。

定义结构体

在您可以创建结构体变量之前,您需要定义其数据类型。要定义结构体,使用struct关键字。

struct的语法

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

例如,

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

这里,定义了一个名为struct Person的派生类型。现在,您可以创建这种类型的变量。

创建struct变量

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

以下是我们创建结构体变量的方式:

struct Person {
// 代码
};

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

创建struct变量的另一种方式是:

struct Person {
// 代码
} person1, person2, p[20];

在这两种情况下,

  • person1和person2是struct Person变量
  • p[]是大小为20的struct Person数组。

访问结构体的成员

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

  1. . - 成员运算符
  2. -> - 结构体指针运算符(将在下一教程中讨论)

假设,您想访问person2的工资。以下是您可以执行的操作。

person2.salary

示例1:C结构体

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

// 创建带有person1变量的结构体
struct Person {
char name[50];
int citNo;
float salary;
} person1;

int main() {

// 为person1的name赋值
strcpy(person1.name, "George Orwell");

// 为person1的其他变量赋值
person1.citNo = 1984;
person1.salary = 2500;

// 打印结构体变量
printf("姓名: %s\n", person1.name);
printf("公民编号: %d\n", person1.citNo);
printf("工资: %.2f", person1.salary);

return 0;
}

输出

姓名: George Orwell
公民编号: 1984
工资: 2500.00

在这个程序中,我们创建了一个名为Person的结构体。我们还创建了一个名为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>

// 使用typedef的结构体person
typedef struct Person {
char name[50];
int citNo;
float salary;
} person;

int main() {

// 创建Person变量
person p1;

// 为p1的name赋值
strcpy(p1.name, "George Orwell");

// 为p1的其他变量赋值
p1.citNo = 1984;
p1.salary = 2500;

// 打印结构体变量
printf("姓名: %s\n", p1.name);
printf("公民编号: %d\n", p1.citNo);
printf("工资: %.2f", p1.salary);

return 0;
}

输出

姓名: George Orwell
公民编号: 1984
工资: 2500.00

这里,我们使用了typedefPerson结构体来创建别名person

// 使用typedef的结构体person
typedef struct Person {
// 代码
} person;

现在,我们可以简单地使用person别名来声明一个Person变量:

// 等同于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() {

// 初始化复数变量
num1.comp.imag = 11;
num1.comp.real = 5.25;

// 初始化数字变量
num1.integer = 6;

// 打印结构体变量
printf("虚部: %d\n", num1.comp.imag);
printf("实部: %.2f\n", num1.comp.real);
printf("整数: %d", num1.integer);

return 0;
}

输出

虚部: 11
实部: 5.25
整数: 6

为什么在C中使用结构体?

假设您想存储一个人的信息:他/她的姓名、公民编号和工资。您可以创建不同的变量name、citNo和salary来存储这些信息。

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

更好的方法是将所有相关信息集合在一个名为Person结构体的单一名称下,并为每个人使用它。

关于结构体的更多内容