C 教程

浏览3732
更新时间2025-08-05

结构

在 C 语言中,结构体(struct)是一种将多个相关的变量组合在一起的方式。结构体中的每个变量都被称为结构体的成员

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

创建结构体

你可以使用 struct 关键字来创建一个结构体,并在大括号内声明其每个成员:

struct MyStructure {   // 结构体声明
  int myNum;           // 成员(int变量)
  char myLetter;       // 成员(char变量)
}; // 以分号结束结构体

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

在主函数(main())内部,使用 struct 关键字,后跟结构体名称和结构体变量名称:

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

struct myStructure {
  int myNum;
  char myLetter;
};

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

访问结构体成员

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

实例

// 创建一个名为 myStructure 的结构体
struct myStructure {
  int myNum;
  char myLetter;
};

int main() {
  // 创建一个名为 s1 的 myStructure 结构体变量
  struct myStructure s1;

  // 为 s1 的成员赋值
  s1.myNum = 13;
  s1.myLetter = 'B';

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

  return 0;
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

现在,你可以轻松地使用一个结构体创建多个具有不同值的结构体变量。

实例

// 创建不同的结构体变量
struct myStructure s1;
struct myStructure s2;

// 为不同的结构变量赋值
s1.myNum = 13;
s1.myLetter = 'B';

s2.myNum = 20;
s2.myLetter = 'C';
运行实例 »

点击 "运行实例" 按钮查看在线实例

结构中的字符串怎么样?

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

实例

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];  // 字符串
};

int main() {
  struct myStructure s1;

  // 试图给字符串赋值
  s1.myString = "Some text";

  // 试图打印值
  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;

  // 使用 strcpy 函数为字符串赋值
  strcpy(s1.myString, "Some text");

  // 打印值
  printf("My string: %s", s1.myString);

  return 0;
}

结果:

My string: Some text
运行实例 »

点击 "运行实例" 按钮查看在线实例

更简洁的语法

你也可以在声明结构体变量时,直接在一行中给其成员赋值。

只需在大括号 {} 内以逗号分隔的列表中插入值即可。注意,使用这种方法时,对于字符串值,你不需要使用 strcpy() 函数:

实例

// 创建一个结构体
struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
  // 创建一个结构体变量并给其赋值
  struct myStructure s1 = {13, 'B', "Some text"};

  // 打印值
  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() {
  // 创建一个结构体变量并给其赋值
  struct myStructure s1 = {13, 'B', "Some text"};

  // 修改值
  s1.myNum = 30;
  s1.myLetter = 'C';
  strcpy(s1.myString, "Something else");

  // 打印值
  printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

  return 0;
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

当你复制结构体的值时,修改值尤其有用:

实例

// 创建一个结构体变量并给其赋值
struct myStructure s1 = {13, 'B', "Some text"};

// 创建另一个结构体变量
struct myStructure s2;

// 将 s1 值复制到 s2
s2 = s1;

// 更改 s2 的值
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");

// 打印值
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);
运行实例 »

点击 "运行实例" 按钮查看在线实例

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

想象一下,你必须编写一个程序来存储有关汽车的不同信息,例如品牌、型号和年份。结构体的伟大之处在于,你可以创建一个单一的“汽车模板”,并用它来制造你想要的每一辆汽车。下面是一个现实生活中的例子。

现实生活中的例子

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

实例

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;
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

相关视频

更多

免费

php8,我来也
初级php8,我来也

321849次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

382472次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

282866次学习

收藏

免费

简单聊聊PHP创业那点事
初级简单聊聊PHP创业那点事

13418次学习

收藏
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号