C 结构体


结构

结构(也称为结构体)是将多个相关变量分组到一个位置的一种方法。结构中的每个变量称为成员的结构。

不像一个数组,一个结构体可以包含许多不同的数据类型(int、float、char等)。


创建结构

您可以使用以下方法创建结构struct关键字并在大括号内声明其每个成员:

struct MyStructure {   // Structure declaration
  int myNum;           // Member (int variable)
  char myLetter;       // Member (char variable)
}; // End the structure with a semicolon

要访问该结构,您必须创建它的变量。

使用struct里面的关键字main()方法,后跟结构体名称,然后是结构体变量的名称:

创建一个名为 "s1" 的结构体变量:

struct myStructure {
  int myNum;
  char myLetter;
};

int main() {
  struct myStructure s1;
  return 0;
}

访问结构成员

要访问结构体的成员,请使用点语法 (.):

示例

// Create a structure called myStructure
struct myStructure {
  int myNum;
  char myLetter;
};

int main() {
  // Create a structure variable of myStructure called s1
  struct myStructure s1;

  // Assign values to members of s1
  s1.myNum = 13;
  s1.myLetter = 'B';

  // Print values
  printf("My number: %d\n", s1.myNum);
  printf("My letter: %c\n", s1.myLetter);

  return 0;
}
亲自试一试 »

现在,您可以仅使用一种结构轻松创建具有不同值的多个结构变量:

示例

// Create different struct variables
struct myStructure s1;
struct myStructure s2;

// Assign values to different struct variables
s1.myNum = 13;
s1.myLetter = 'B';

s2.myNum = 20;
s2.myLetter = 'C';
亲自试一试 »

结构中的字符串怎么样?

请记住,C 中的字符串实际上是一个字符数组,不幸的是,您不能像这样向数组赋值:

示例

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];  // String
};

int main() {
  struct myStructure s1;

  // Trying to assign a value to the string
  s1.myString = "Some text";

  // Trying to print the value
  printf("My string: %s", s1.myString);

  return 0;
}

会出现错误:

prog.c:12:15: error: assignment to expression with array type
亲自试一试 »

不过,有一个解决方案!您可以使用strcpy()函数并将值赋值给s1.myString, 像这样:

示例

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30]; // String
};

int main() {
  struct myStructure s1;

  // Assign a value to the string using the strcpy function
  strcpy(s1.myString, "Some text");

  // Print the value
  printf("My string: %s", s1.myString);

  return 0;
}

结果:

My string: Some text
亲自试一试 »

更简单的语法

您还可以在声明时在一行中为结构变量的成员赋值。

只需将值插入大括号内以逗号分隔的列表中{}。请注意,您不必使用strcpy()使用此技术的字符串值函数:

示例

// Create a structure
struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
  // Create a structure variable and assign values to it
  struct myStructure s1 = {13, 'B', "Some text"};

  // Print values
  printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

  return 0;
}
亲自试一试 »

笔记:插入值的顺序必须与结构中声明的变量类型的顺序匹配(13 表示 int,'B' 表示 char 等)。


复制结构

您还可以将一种结构分配给另一种结构。

在以下示例中,s1 的值被复制到 s2:

示例

struct myStructure s1 = {13, 'B', "Some text"};
struct myStructure s2;

s2 = s1;
亲自试一试 »

修改值

如果你想改变/修改一个值,你可以使用点语法(.)。

要修改字符串值,strcpy()函数又有用了:

示例

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
  // Create a structure variable and assign values to it
  struct myStructure s1 = {13, 'B', "Some text"};

  // Modify values
  s1.myNum = 30;
  s1.myLetter = 'C';
  strcpy(s1.myString, "Something else");

  // Print values
  printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

  return 0;
}
亲自试一试 »

当您复制结构值时,修改值特别有用:

示例

// Create a structure variable and assign values to it
struct myStructure s1 = {13, 'B', "Some text"};

// Create another structure variable
struct myStructure s2;

// Copy s1 values to s2
s2 = s1;

// Change s2 values
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");

// Print values
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);
亲自试一试 »

好的,那么,结构有什么用呢?

想象一下,您必须编写一个程序来存储有关汽车的不同信息,例如品牌、型号和年份。结构的优点在于您可以创建一个"Car template"并将其用于您制造的每辆汽车。请参阅下面的现实生活示例。


现实生活中的例子

使用结构来存储有关汽车的不同信息:

示例

struct Car {
  char brand[50];
  char model[50];
  int year;
};

int main() {
  struct Car car1 = {"BMW", "X5", 1999};
  struct Car car2 = {"Ford", "Mustang", 1969};
  struct Car car3 = {"Toyota", "Corolla", 2011};

  printf("%s %s %d\n", car1.brand, car1.model, car1.year);
  printf("%s %s %d\n", car2.brand, car2.model, car2.year);
  printf("%s %s %d\n", car3.brand, car3.model, car3.year);

  return 0;
}
亲自试一试 »

C 练习

通过练习测试一下

练习:

填写缺失的部分以创建 Car 结构:

 Car {
  char brand[50];
  char model[50];
  int year;
};

开始练习