C语言提供结构体来管理不同类型的数据组合,将不同类型的数据组合为一个整体。如将一名学生的学号、姓名、性别、年龄、地址等组合为一个整体,而不是单独定义变量以至难以分清。
声明结构体类型的一般形式为
struct 结构体名 {成员表列};
之后定义变量名,如:
struct student student1,student2;//定义结构体变量
结构体的初始化、输入输出,用例子来说明:
#include <stdio.h>
struct student{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};//结构体类型声明,要放在main函数之前,最后一定要加分号
int main() {
//定义结构体变量并初始化
// 如果结构体变量已经定义,那么只能对它的每个成员单独赋值,如s.num=1003,而不能用s={...}
struct student s={1001,"lele",'M',20,85.4,"Shenzhen"};
struct student sarr[3];//定义结构体数组变量
int i;
//在进行打印输出时,必须访问到成员,即“结构体变量名.成员名”的形式
printf("%d %s %c %d %f %s\n",s.num,s.name,s.sex,s.age,s.score,s.addr);
for(i=0;i<3;i++){
//各成员取地址输入,%c不会忽略空格,要在待读取的字符数据与其他数据之间加入空格
scanf("%d%s %c%d%f%s",&sarr[i].num,&sarr[i].name,
&sarr[i].sex,&sarr[i].age,&sarr[i].score,&sarr[i].addr);
}
for(i=0;i<3;i++){
printf("%d %s %c %d %f %s\n",sarr[i].num,sarr[i].name,
sarr[i].sex,sarr[i].age,sarr[i].score,sarr[i].addr);
}
return 0;
}
测试数据
1001 aaaa M 20 85.4 Shenzhen 1002 bbbb M 21 87.5 Shenzhen 1003 cccc M 22 81.6 Shenzhen
结果为
结构体对齐的规则:结构体的大小必须是其最大成员的整数倍。
#include <stdio.h>
struct student_1{
double score;//double是一种浮点类型,8个字节
short age;//short短整型,2个字节(32位机中)
};
struct student_2{
double score;
int height;
short age;
};
struct student_3{
int height;
char sex;
short age;
};
int main() {
struct student_1 s1;
struct student_2 s2;
struct student_3 s3;
printf("s1 size=%d\n", sizeof(s1));
printf("s2 size=%d\n", sizeof(s2));
printf("s3 size=%d\n", sizeof(s3));
return 0;
}
结果为