C 结构体

在 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];

在这两种情况下,

  • person1person2struct Person 变量
  • p[] 是一个大小为 20 的 struct Person 数组。

访问结构体的成员

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

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

假设您想访问 person2salary。方法如下。

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

在此程序中,我们创建了一个名为 Personstruct。我们还创建了一个名为 person1Person 变量。

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

在这里,我们将 typedefPerson 结构体一起使用,创建了一个别名 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 语言中的结构体有什么用?

假设您想存储一个人的信息:姓名、公民身份号码和薪水。您可以创建不同的变量 namecitNosalary 来存储此信息。

如果您需要存储多于一个人的信息怎么办?现在,您需要为每个人和每条信息创建不同的变量:name1citNo1salary1name2citNo2salary2 等。

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


关于 struct 的更多内容

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战