C语言提供了一种数据结构,它可以把不同类型数据项(也可以是相同类型数据项)组织成一个整体,这就是结构类型。
目录
一.结构体类型的定义和引用
1.结构体类型的定义和声明
1.1.结构体变量的定义
在C语言中,使用struct关键字来定义结构体。结构体定义通常放在函数外部,作为全局变量或者在函数内部作为局部变量。
struct Person {
char name[20];
int age;
float height;
};
注意:
struct 是关键字,表示一个数据结构,不可省略。
整个结构体的定义必须以分号结尾。
1.2.声明结构体变量
在定义结构体之后,我们可以声明结构体变量来实际使用它。在声明时,我们需要指定结构体的类型和变量名。
struct Person p1;
2.结构体变量的引用与结构体成员的访问
2.1.访问结构体成员
可以使用点运算符”.“来访问结构体的成员。
strcpy(p1.name, "John");
p1.age = 25;
p1.height = 1.75;
2.2.非指针型结构变量的访问
对于非指针型结构变量来说,要通过成员运算符”.“逐个访问其成员。访问的一般格式为:
结构体变量名.成员名
2.3.指针型结构变量的访问
对于指针型结构变量来说,一般是通过"->"运算符来访问其成员,也使用点运算符”.“来访问。访问的一般格式为:
结构体指针->成员名 或(*结构体指针).成员名
2.4.结构体嵌套
如果结构体成员本身又是一个结构体类型,则只能通过多级的分量运算,对最低一级的成员进行引用。
结构体变量名.成员名.子成员名.…….最低子成员名
二.结构与函数
1.在函数内部声明结构体变量
我们可以在函数内部声明结构体变量,就像声明其他变量一样。这种方法允许我们在函数内部创建临时对象并对其进行操作。
2.通过指针传递结构体变量
我们可以通过指针将结构体变量作为参数传递给函数,以便在函数内部修改结构体的值。这种方法比直接传递结构体更高效,并且可以避免大量的内存复制。下面是结构体作为函数参数时的用法:
void printPerson(struct Person p) {
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
printf("Height: %.2f\n", p.height);
}
将结构体作为函数的参数传递,可以通过值传递或引用传递来操作结构体。
3.返回结构体类型的值
我们可以从函数中返回结构体类型的值。可以使用return语句返回结构体对象,并在函数调用处将其分配给另一个结构体变量。
三.结构中的结构
1.定义结构中的结构
在定义结构中的结构时,我们需要在内部结构体声明之前先声明外部结构体。这是因为内部结构体可能会引用外部结构体。
2.结构体嵌套
在结构体中,我们可以包含其他结构体作为成员,从而创建嵌套结构体。
struct Date {
int day;
int month;
int year;
};
struct Student {
char name[20];
struct Date dob;
};
3.初始化结构中的结构
我们可以通过嵌套的方式初始化结构中的结构。可以使用大括号来分别初始化每个结构体对象。
四.总结
结构体是一个强大的工具,可用于组织和管理复杂的数据。通过灵活运用结构体,我们能够更好地组织和操作数据,使程序更加模块化和可读性更高。
五.常见错误
1.定义结构体时,在}右边漏掉了";"。
2.把复杂数据类型名当作变量名。
3.定义复杂数据类型时为成员变量赋初始值