结构体类型:
不是基本类型也不是指针,他是若干相同或不同类型数据的集合。
常用的构造类型有数组、结构体、共用体
数组时具有相同类型数据的集合,用处理大量相同类型的数据运算。
结构体用于将不同类型的数据组合到一起,以便引用。
1.先声明结构体类型,再去定义结构体变量
第一步:定义结构体变量
struct 结构体类型名 结构体变量1,结构体变量2,结构体变量3;
注:1.定义结构体类型时,不分配空间
2.定义结构体变量后,才会分配空间
在定义结构体类型时顺便定义结构体变量,以后还可以定义结构体变量
2.结构以变量的引用
结构体变量队成员调用的方式
列:把一个学生的信息(学号,姓名,性别,住址)保存到一个结构体中,然后输出这些信息
#include <stdio.h>
void test_struct(void)
{
struct str
{
char *name;
char *gender;
char *add;
long long int qq;
long long int phone;
}str01={"张三","男","吉祥村",256522887,18963547421},
str02={"李四","女","吉祥村街道",256524887,189635421},
str03={"小芳","女","吉祥村街道",2565247,1896351},
str04={.name="小记",.add="沙金村"};
printf("姓名:%s\n",str01.name);
printf("性别:%s\n",str01.gender);
printf("住址:%s\n",str01.add);
printf("qq号:%d\n",str01.qq);
printf("手机号:%d\n",str01.phone);
printf("\n");
printf("姓名:%s\n",str02.name);
printf("性别:%s\n",str02.gender);
printf("住址:%s\n",str02.add);
printf("qq号:%d\n",str02.qq);
printf("手机号:%d\n",str02.phone);
printf("2021.8.1张三和李四结婚了,2022.3.3他们生了一个小女孩\n");
printf("\n");
printf("姓名:%s\n",str03.name);
printf("性别:%s\n",str03.gender);
printf("住址:%s\n",str03.add);
printf("qq号:%d\n",str03.qq);
printf("手机号:%d\n",str03.phone);
printf("姓名:%s\n",str04.name);
printf("性别:%s\n",str04.gender);
printf("住址:%s\n",str04.add);
printf("qq号:%d\n",str04.qq);
printf("手机号:%d\n",str04.phone);
}
int main()
{
printf("\t\t通讯录\n");
test_struct();
return 0;
}
用结构体定义的数组来实现冒泡排序(基础算法)
//排序基础算法,分数排序后,其他信息同步跟随排序
void sort_stu_arr(struct stu_score edu[], int n)
{
int i,j;
float temp;
int id_temp;
char name_temp[20];
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(edu[j].score<edu[j+1].score)
{
temp=edu[j].score;
edu[j].score=edu[j+1].score;
edu[j+1].score=temp;
id_temp=edu[j].id;
edu[j].id=edu[j+1].id;
edu[j+1].id=id_temp;
strcpy(name_temp,edu[j].name);
strcpy(edu[j].name,edu[j+1].name);
strcpy(edu[j+1].name,name_temp);
}
}
}
}
优化算法
//排序优化算法,比较后,直接交换结构体变量信息
void sort_stu_advance(struct stu_score edu[], int n)
{
int i,j;
//定义结构体变量,作为中间暂存
struct stu_score edu_temp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(edu[j].score<edu[j+1].score)
{
edu_temp=edu[j];
edu[j]=edu[j+1];
edu[j+1]=edu_temp;
}
}
}
}