在C语言中,结构体即为由多个不同数据类型的变量组成的数据结构。通过结构体的成员变量可以方便地同时存储和操作多个数据。结构体的定义使用关键字struct,格式形如:
struct student { char name[20];
int age;
float score;
};
该结构体定义了一个名为student的数据类型,由三个成员变量组成,分别为一个长度为20的字符数组name、一个整型变量age、一个浮点型变量score。整个结构体占用的内存大小为各成员变量所占内存大小的总和。
声明和初始化结构体变量时,需要指明其类型和变量名,可以使用以下两种方式进行初始化:
// 方式一:struct student stu1;
strcpy(stu1.name, "Lucy");
stu1.age = 18;
stu1.score = 90.5;
// 方式二:
struct student stu2 = {"Mike", 20, 95.2};
其中,方式一需要逐个给每个成员变量赋值,而方式二可以一次性赋初值。声明时,也可以直接在定义时进行,如:
struct student { char name[20];
int age;
float score;
} stu3 = {"John", 22, 88.5};
结构体的成员变量可以使用“.”运算符访问,同时也可以使用指针变量和“->”运算符进行访问,如:
struct student stu1;struct student *p = &stu1;
stu1.age = 18;
p->age = 20;
以上分别对结构体变量和结构体指针变量中的age成员变量进行了赋值操作。此外,结构体还可以作为参数传递给函数,如:
void print(struct student stu) { printf("Name: %s Age: %d Score: %.1f\n", stu.name, stu.age, stu.score);
int main() {
struct student stu1 = {"Lucy", 18, 90.5};
print(stu1);
return 0;
在一个结构体中可以嵌套另一个结构体,如:
struct date { int year;
int month;
int day;
};
struct student {
char name[20];
struct date birthday;
float score;
};
同时,C语言还支持匿名结构体,即结构体中不定义结构体名,如:
struct student { char name[20];
struct {
int year;
int month;
int day;
} birthday;
float score;
};
这样做的好处是节省代码,不需要为嵌套的结构体定义额外的类型名。但同时也会使代码可读性变差,建议根据实际情况选择是否使用。