1. 简介
在C语言中,结构是一种用户自定义的数据类型,它可以包含多个不同类型的数据成员,这些成员可以是对应基本数据类型的变量,也可以是其他结构类型的变量。结构类型定义了一组相关数据的结构,可以通过定义结构变量来使用这些数据。结构在程序设计中起着非常重要的作用,可以让程序更加模块化和可维护。
2. 结构定义及访问
结构可以通过关键字“struct”定义,定义结构的一般形式如下:
struct struct_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
...
};
其中,struct_name是结构类型的名称,member_type是结构成员的类型,member_name是结构成员的名称。例如,下面的代码定义了一个名为“Person”的结构,包含了三个成员变量:
struct Person {
char name[20];
int age;
float weight;
};
可以在主函数中定义结构变量并进行访问:
#include
struct Person {
char name[20];
int age;
float weight;
};
int main()
{
struct Person p1 = {"Tom", 20, 60.5};
printf("Name: %s\n", p1.name);
printf("Age: %d\n", p1.age);
printf("Weight: %f\n", p1.weight);
return 0;
}
运行结果为:
Name: Tom
Age: 20
Weight: 60.500000
这里定义了一个名为“p1”的结构变量,使用“{}”初始化结构成员的值。然后通过“.”运算符访问结构成员的值,输出“p1”的属性信息。
2.1 结构嵌套
结构可以包含其他结构作为其成员,这种结构嵌套可以更好地组织数据:
struct Date {
int year;
int month;
int day;
};
struct Student {
char name[20];
int age;
float height;
struct Date birthday; // 嵌套Date结构
};
这里定义了一个“Date”结构来记录日期信息,然后在“Student”结构中嵌套了“Date”结构。这样就可以通过“Student”结构来记录学生的生日信息。
可以通过以下代码访问嵌套在结构中的成员:
#include
struct Date {
int year;
int month;
int day;
};
struct Student {
char name[20];
int age;
float height;
struct Date birthday; // 嵌套Date结构
};
int main()
{
struct Student s1 = {"Tom", 20, 181.5, {2000, 6, 20}};
printf("Name: %s\n", s1.name);
printf("Age: %d\n", s1.age);
printf("Height: %f\n", s1.height);
printf("Birthday: %d/%d/%d\n", s1.birthday.year, s1.birthday.month, s1.birthday.day);
return 0;
}
输出结果为:
Name: Tom
Age: 20
Height: 181.500000
Birthday: 2000/6/20
3. 结构指针
结构指针是指向结构的指针变量,通过结构指针可以方便地访问结构的成员。
声明结构指针有如下两种方式:
struct struct_name *ptr;
// 或者
typedef struct struct_name {
...
} *struct_ptr;
其中,第一种方式是直接在定义指针变量时声明其类型为结构指针,第二种方式是使用typedef定义一个结构类型的别名,并在定义指针变量时用别名代替真实类型名。
可以通过以下代码演示结构指针的使用:
#include
struct Student {
char name[20];
int age;
float height;
};
int main()
{
struct Student s1 = {"Tom", 20, 181.5};
struct Student *ptr_s = &s1;
printf("Name: %s\n", ptr_s->name);
printf("Age: %d\n", ptr_s->age);
printf("Height: %f\n", ptr_s->height);
return 0;
}
这里先定义了一个“Student”结构变量s1,并通过“&”取得其地址,存储在结构指针变量“ptr_s”中。然后通过“->”运算符访问结构指针中的成员变量。
输出结果为:
Name: Tom
Age: 20
Height: 181.500000
4. 结构数组
结构数组是一种包含多个结构变量的数组。可以通过以下方式定义结构数组:
struct struct_name array_name[N];
其中,N表示结构数组的长度,struct_name是结构类型的名称,array_name是结构数组的名称。例如:
struct Student {
char name[20];
int age;
float height;
};
struct Student class[3];
这里定义了一个名为“class”的结构数组,长度为3,存储了三个学生的信息。
可以通过以下代码访问结构数组中的元素:
#include
struct Student {
char name[20];
int age;
float height;
};
int main()
{
struct Student class[3] = {
{"Tom", 18, 180.5},
{"Lucy", 19, 170.0},
{"Jack", 20, 175.5}
};
for(int i=0; i<3; i++) {
printf("Name: %s\n", class[i].name);
printf("Age: %d\n", class[i].age);
printf("Height: %f\n", class[i].height);
printf("\n");
}
return 0;
}
这里使用了循环输出结构数组中的每个学生信息。输出结果为:
Name: Tom
Age: 18
Height: 180.500000
Name: Lucy
Age: 19
Height: 170.000000
Name: Jack
Age: 20
Height: 175.500000
5. 总结
结构是C语言中非常重要的数据类型之一,通过结构可以方便地组织数据,更加模块化和可维护。本文介绍了结构的定义和访问方式,结构嵌套、结构指针和结构数组等重要知识点。掌握了这些知识后,可以更好地利用结构来组织程序中的数据,使程序更加高效和易于维护。