说明:
借此博客融合了网络上各处资源对C语言结构体进行总结(参考来源在文末),对自己也是一个复习的提示,可能出现的错误还请大佬们多多指点。
C语言结构体
数组(Array)是一组具有相同类型的数据的集合。在实际的编程中还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,不能用一个数组来存放。在C语言中,可以使用结构体(struct)来存放一组不同类型的数据。结构体的定义形式为:
struct 结构体名{
结构体所包含的变量或数组(称为结构体**成员**)
};
//切记分号一定不能忘,这是一条完整的语句!!!
另外,可以利用typedef对结构体类型重命名,减少工作量:
typedef struct Student
{
int a;
}Stu;
Stu exam;
结构体是一种数据类型,由程序员定义,可包含多个其他类型的数据。像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。
结构体变量
结构体是一种数据类型,则可以用于定义变量:
struct stu stu1, stu2;
//或者
typedef struct Student
{
int a;
}Stu;
Stu exam1,exam2;
可以在定义结构体的同时定义结构体变量,将变量放在结构体定义的最后即可。
struct stu{
char *name; //姓名
//结构体中声明中尽量使用字符指针进行字符串操作,在初始化的时候会方便
//如果使用的是字符数组,那么会就要使用strcpy进行拷贝初始化
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
} stu1, stu2;
打个比方,stu或者Stu就像一个“模板”,不占用内存空间,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,需要内存空间来存储,根据同一张图纸生产出来的零件的特性都是一样的。
结构体成员的获取和赋值
数组使用下标[ ]获取单个元素,结构体使用点号.获取单个成员。通过这种方式可以获取成员的值,也可以给成员赋值:获取结构体成员的一般格式为:
结构体变量名.成员名;
struct{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
} stu1;
//给结构体成员赋值
stu1.name = "Tom";
stu1.num = 12;
stu1.age = 18;
stu1.group = 'A';
stu1.score = 136.5;
//读取结构体成员的值
printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n",
stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
除了可以对成员进行逐一赋值,也可以在定义时整体赋值,例如:
struct{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
} stu1, stu2 = {
"Tom", 12, 18, 'A', 136.5 };
结构体嵌套
结构体嵌套,可用下图形象说明:
结构体嵌套结构体,示例如下:
struct date
{
int month;
int day;
int year;
};
struct student
{
int num;
char name