一、结构体
数组是一组具有相同类型的数据的集合,当我们需要不同类型的一组数据时,例如成绩登记表:姓名(字符串),学号(整数),成绩(小数)等,类型不一样不能用数组存放。
1.1结构体定义
struct 结构体名{
结构体所包含的变量或数组
};
例如:student为结构体名,它包含了 3个成员,分别是 name、num、score。
struct student{
char *name; //姓名
int num; //学号
float score; //成绩
};
如果觉得结构体名字太繁琐,也可以如下:stu是typedef
重定义结构体的类型名。
typedef struct student
{
char *name; //姓名
int num; //学号
float score; //成绩(这是一个嵌套结构体类型)
}stu;
注意:
1、若结构体声明在mian函数之外,那结构体变量是一个全局变量
2、结构体声明结束的时,千万不要忘记{}
后面有一个分号。
3、结构体成员变量也可以是另一个结构体类型,这种用法被称为:嵌套结构体。(后面讲)
1.2结构体变量
结构体是一个数据类型,那就可以去定义变量。
struct student stu1, stu2; //变量stu1, stu2都是stu类型,由3个成员组成
也可以直接定义结构体时定义变量。
struct student{
char *name; //姓名
int num; //学号
float score; //成绩
}stu1, stu2;
注意:
理论上来说结构体里的成员存储位置是连续的,1+4+4=9字节
name | num | score |
但实际编译过程中可能存在缝隙,1+4+2+4=10字节
name | num | score |
1.3成员获取和赋值
数组使用下标[ ]
获取单个元素,结构体使用点号.
获取单个成员。一般格式为:
结构体变量名.成员名;
可以逐一赋值:
#include <stdio.h>
int main()
{
struct student{ //局部变量
char *name; //姓名
int num; //学号
float score; //成绩
} stu1;
//给结构体成员赋值
stu1.name = "Tom";
stu1.num = 12;
stu1.score = 136.5;
//读取结构体成员的值
printf("%s的学号是%d,成绩是%.1f!\n",stu1.name, stu1.num, stu1.score);
return 0;
}
可以整体赋值:
struct student{ //局部变量
char *name; //姓名
int num; //学号
float score; //成绩
} stu1 = { "Tom", 12, 136.5 };
注意:
结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。