手册
目录
收藏773
分享
阅读703
更新时间2025-08-05
在 C 语言中,结构体(struct)是一种将多个相关的变量组合在一起的方式。结构体中的每个变量都被称为结构体的成员。
与数组不同,结构体可以包含许多不同的数据类型(如 int、float、char 等)。
你可以使用 struct 关键字来创建一个结构体,并在大括号内声明其每个成员:
struct MyStructure { // 结构体声明
int myNum; // 成员(int变量)
char myLetter; // 成员(char变量)
}; // 以分号结束结构体
要访问该结构,您必须创建它的变量。
在主函数(main())内部,使用 struct 关键字,后跟结构体名称和结构体变量名称:
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;
}
运行实例 »点击 "运行实例" 按钮查看在线实例
相关
视频
RELATED VIDEOS
科技资讯
1
2
3
4
5
6
7
8
9
精选课程
共5课时
17.2万人学习
共49课时
77万人学习
共29课时
61.7万人学习
共25课时
39.3万人学习
共43课时
70.9万人学习
共25课时
61.6万人学习
共22课时
23万人学习
共28课时
33.9万人学习
共89课时
125万人学习