2021-01-19
结构体
什么是结构体?
把一些基本类型数据组合在一起形成的一个新的复合数据类型,叫结构体;
例如:
struct Student{
String name;
int age;
String sex;
float score;
};
为什么需要结构体?
为了表示一些复杂的事务,而普通的基本类型无法满足实际要求;
如何定义结构体?
//第一种:struct Student{ int age ; float score;char sex;};
//第二种:struct Student2{ int age ; float score;char sex;}st2;
//第三种:struct { int age ; float score;char sex;}st2;
怎么使用结构体变量
1、赋值和初始化
#include <stdio.h>
struct Student{ int age ; float score;char sex;};
int main(void){
struct Student st = {80,66.6,'f'};//定义的同时赋予初始化;
struct Student st2;//先定义
st2.age =10;//在赋值
st2.score = 88;
st2.sex = 'f';
printf("%d %f %c\n",st.age,st.score.st.sex);
printf("%d %f %c\n",st2.age,st2.score.st2.sex);
return 0;
2、如何取出结构体变量中的每一个成员【重点】
1、结构体变量名.成员名;
2、指针变量名->成员名;例如:psp->age等价于(* psp)->age;
psp->age的含义:psp所指向的那个结构体变量中的age这个成员;
3、结构体变量的运算
4、结构体变量和结构体变量指针作为函数参数传递的问题
举例:动态构造存放学生信息的结构体数组
动态构造一个数组,存放学生信息;然后按分数排序
# include <stdio.h>
#include <malloc.h>
struct Student
{
int age;
float score;
char name[100];
};
int main(void)
{
int len ;
struct Student * pArr;
int i ,j ;//循环变量
struct Student t;//结构体t
printf("请输入学生的个数:\n");
printf("len = ");
scanf("%d",&len);
//动态构造一维数组
pArr = (struct Student *)malloc(len * sizeof(struct Student));
for(i=0; i<len; ++i){
printf("请输入第%d个学生的信息:\n",i+1);
printf("age = ");
scanf("%d",&pArr[i].age);
printf("name = ");
scanf("%s",pArr[i].name);//name是数组名,本身就已经是数组首元素的地址,所以pArr[i].name不能改成&pArr[i].name
printf("score = ");
scanf("%f",&pArr[i].score);
}
//冒泡排序:升序
for(i=0; i<len-1;++i){
for(j=0;j<len-1-i;++i){
if(pArr[j].score > pArr[j+1].score){//成绩比较,成绩大的,把位置呼唤
t = pArr[j];
pArr[j] = pArr[j+1];
pArr[j+1] = t;
}
}
}
printf("\n\n学生的信息是:\n");
//输出
for(i = 0;i<len;++i){
printf("第%d个学生的信息:\n",i+1);
printf("age = %d\n",pArr[i].age);
printf("name = %s\n",pArr[i].name);//name是数组名,本身就已经是数组首元素的地址,所以pArr[i].name不能改成&pArr[i].name
printf("score = %f\n",pArr[i].score);
printf("\n");
}
return 0;
}
![]()