下面是关于C结构体(Struct)的完整使用攻略。
结构体简介
在C语言中,结构体(Struct)是一种自定义类型,可以包含多个不同类型的成员变量,这些成员变量可以是任何基本数据类型、数组、指针等类型,相当于是一种用户自己定义的复合数据类型。通过结构体,我们可以方便地组织具有一定逻辑关系的数据,也可以通过结构体实现面向对象的编程思想。
定义结构体
结构体的定义语法如下:
struct 结构体名 {
类型 成员名1;
类型 成员名2;
//...
} 应用范围;
其中应用范围
是可选的,表示结构体的作用范围。如果省略应用范围
,则默认作用范围为当前文件。
下面是一个示例:
struct Student {
char name[20];
int age;
float score;
} stu;
表示定义了一个Student
结构体,包含了成员变量name
(字符数组类型)、age
(整型)、score
(浮点型),并且定义了一个stu
变量。
使用结构体
定义结构体变量
要定义一个结构体变量,可以按如下方式:
struct Student stu = {"Tom", 18, 89.5}; //也可以用stu.name = "Tom";来修改name变量的值
表示定义了一个Student
类型的变量stu
,并初始化其成员变量为name="Tom"
、age=18
、score=89.5
。
访问结构体成员变量
要访问结构体成员变量,可以用.
来连接结构体变量和成员变量名,例如:
printf("%s %d %.1f\n", stu.name, stu.age, stu.score);
表示输出stu
变量的成员变量。
结构体数组
结构体数组与普通数组类似,但数组中的每个元素都是一个结构体变量。定义结构体数组的语法如下:
struct Student stuArr[3] = {
{"Tom", 18, 89.5},
{"Jerry", 17, 90.0},
{"Lucy", 19, 85.5}
};
上述语句表示定义了一个类型为Student
、长度为3的数组stuArr
,并且初始化了三个Student
类型的结构体。
结构体指针
结构体指针也和普通指针类似,用于指向某个结构体变量的地址。定义结构体指针的语法如下:
struct Student *p = &stu;
其中的p
就是一个Student
类型的结构体指针,指向stu
结构体变量的地址。
动态分配结构体变量内存
和普通变量一样,结构体变量也可以使用malloc()
函数来动态分配内存,例如:
struct Student *p = (struct Student *)malloc(sizeof(struct Student));
上述语句表示分配了一个Student
类型结构体所需的内存,并将其地址赋给指针p
。
下面是一个示例:
#include <stdio.h>
#include <stdlib.h>
struct Student {
char name[20];
int age;
float score;
};
int main() {
struct Student stu = {"Tom", 18, 89.5};
printf("%s %d %.1f\n", stu.name, stu.age, stu.score); //输出结构体成员变量
struct Student *p = &stu;
printf("%s %d %.1f\n", p->name, p->age, p->score); //指针访问结构体成员变量
struct Student stuArr[3] = { //结构体数组
{"Tom", 18, 89.5},
{"Jerry", 17, 90.0},
{"Lucy", 19, 85.5}
};
for (int i=0; i<3; i++) {
printf("%s %d %.1f\n", stuArr[i].name, stuArr[i].age, stuArr[i].score);
}
struct Student *p2 = (struct Student *)malloc(sizeof(struct Student)); //动态分配结构体变量内存
p2->age = 20;
printf("%d\n", p2->age);
free(p2); //释放内存
return 0;
}
上述示例中,我们定义了一个Student
类型的结构体,定义了结构体变量、指针、数组,还通过malloc()
函数动态分配了一个结构体变量的内存,并释放了该内存。