C 结构体(structs)
结构体
结构体(也称struct)是一种将多个相关变量组合在一起的方法。
结构体中的每个变量都称为该结构体的成员。
与数组不同,一个结构体可以包含多种不同的数据类型(例如 int、float、char 等)。
创建结构体
您可以使用 `struct` 关键字创建结构体,并在花括号内声明其每个成员:
struct MyStructure { // 结构声明
int myNum; // Member (int variable)
char myLetter; // Member (char variable)
};
// 以分号结束该结构。
要访问该结构体,必须创建一个包含该结构的变量。
在 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() {
// 创建一个名为 myStructure 的结构体变量 s1
struct myStructure s1;
// 为 s1 的成员赋值
s1.myNum = 13;
s1.myLetter = 'B';
// 打印值
printf("My number: %d", s1.myNum);
printf("My letter: %c", 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]; // String
};
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() 函数。
示例
// 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"};
// 打印值
printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);
return 0;
}
亲自试一试 »
注意:插入值的顺序必须与结构体中声明的变量类型顺序一致(int 类型为 13,char 类型为 'B',等等)。
复制结构体
您还可以将一个结构体赋值给另一个结构体。
在以下示例中,s1 的值被复制到 s2:
修改值
如果您想更改/修改某个值,可以使用点语法(.")。
要修改字符串值,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");
// 打印值
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", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s", s2.myNum, s2.myLetter, s2.myString);
亲自试一试 »
好的,那么,结构体有什么用呢?
假设你需要编写一个程序来存储关于汽车的各种信息,例如品牌、型号和年份。结构体的优势在于,你可以创建一个"汽车模板",并将其用于你创建的每一辆汽车。请看下面的实际示例。
真实案例
使用结构体存储关于汽车的各种信息:
示例
struct Car {
char brand[30];
char model[30];
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", car1.brand, car1.model, car1.year);
printf("%s %s %d", car2.brand, car2.model, car2.year);
printf("%s %s %d", car3.brand, car3.model, car3.year);
return 0;
}
亲自试一试 »

