首页 > 代码库 > 有关结构体的认识应用
有关结构体的认识应用
最近把结构体的部分知识又仔细的研究学习了一下,总结了一下内容,希望者篇文章对那些对结构体模糊的人c结构体
1, 结构体是一种自定义的数据类型,也是用来存储多个数据的大容器不过结构体要比数组灵活,它可以存储不同类型的数据
2, 结构体的定义
struct + 结构体名字 {大括号中填写结构体成员,多个结构体成员之间通过分号间隔}
如下:
struct student {
// 结构体成员
char name[20];//存储姓名
char sex; // 存储性别
int number; //存储学号
int score; // 存储分数
};// 分号是结构体定义结束的标志,必不可少
3, typedef 类型重定义,即给已有的类型重新起一个名字,新的名字和原类型具有同样的功能;
typedef 第一种格式, 先定义结构体类型,然后再typedef
如:typedef int integer;
给结构体类型 struct student 重新定义一个名字Stu
typedef struct student Stu;
typedef 第二种格式, 定义结构体的同时,typedef (这种格式比较常用)
typedef struct point1 {
float abscissa; //存储横坐标
float ordinate; //存储纵坐标
}Poi1;
其中Poi1此后可以作为一个数据结构类型应用
如: Poi1 p1 = {};就是定义了一个结构体类型变量p1
4, 结构体变量访问结构体成员的方式,通过结构体变量.结构体成员,
如: printf("number = %d\n",stu.number);
5, 结构体数组:
// 定义一个学生结构体变量
Stu person[4] = {{"Frank",‘f‘,22,10086,87},{"Duck",‘f‘,28,10087,93},{"Xiaoming",‘f‘,27,10088,93},{"Phone",‘f‘,25,10089,75}};
// 运用结构体数组对学生按成绩排序:
for (int i = 0; i < 4; i ++) {
if (person[i].score > scoreMax.score) {
scoreMax = person[i];
}
if (person[i].age < ageMin.age) {
ageMin = person[i];
}
}
6, 结构体内存分配原则
以结构体成员所规定的存储空间最大的空间大小为单位来进行分配,是
最大空间的最小整数倍
7, 结构体可以嵌套, 即在一个结构体中的结构体成员是另一个结构体类型的变量
如:先定义一个日期的结构体Date
typedef struct birthday
{
int year;
int month;
int day;
}Birth;
则:结构体嵌套, 在一个结构体中的结构体成员是另一个结构体类型的变量
typedef struct stu {
char name[20]; //存储学生姓名
char sex; //存储学生性别
int age; // 存储学生年龄
int score; //存储学生分数
Birth birth; //出生日期
}Stu;
8,练习:
1), 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
int days(date dat)
{
int a[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
int day = 0;
BOOL isTrue ; // 用于判断该年是否为闰年
// 判断该年是否为闰年
if (dat.year % 400 == 0 || (dat.year % 4 == 0 && dat.year % 100 != 0)) {
isTrue = 1; // 如果该年是闰年,令isTrue 为 1
} else {
isTrue = 0;
}
day += a[dat.month - 1] + dat.day;
day += isTrue && dat.month >= 3 ? 1 : 0;
return day;
}
2), 有5名学生保存在结构体数组中,编程按学生的姓名降序排序
void sortName(Stu a[],int n)
{
for (int i = 0; i < n - 1; i ++) {
for (int j = 0; j < n - 1 -i ; j ++) {
if (strcmp(a[j].name, a[j + 1].name ) < 0) {
Stu temp = a[j]; //temp 为中间变量,用于交换两个结构体元素
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}