1.结构体数组当作形参
和数组传参类似,将结构体数组的数组名当作形参传入函数,示例如下:
void px(STU student[], int length)
练习如下:自定义结构体和函数,输入输出几个学生的姓名和成绩,再根据姓名查询学生,代码如下:
#include<stdio.h>
#include<string.h>
typedef struct stu{
char name[15];
int cj;
}STU;
int sc(STU *st,int x){
int s;
for(s=0;s<x;s++){
scanf("%s%d",st[s].name,&st[s].cj);
}
return 0;
}
int pri(STU *st,int x){
int s;
for(s=0;s<x;s++){
printf("%s %d\n",st[s].name,st[s].cj);
}
return 0;
}
STU zx(STU *st,int x){
int s,m;
STU z;
STU min=st[0];
for(s=0;s<x;s++){
if(min.cj>st[s].cj){
min.cj=st[s].cj;
z=st[s];
}
}
return z;
}
void mz(STU *st,int x,char *name){
int s;
int n=strlen(name);
int m=0;
STU temp;
for(s=0;s<x;s++){
if(strcmp(st[s].name,name)==0){
temp=st[s];
printf("%s %d",temp.name,temp.cj);
}else{
m++;
}
}
if(m>x){
printf("未找到这个人。\n");
}
}
int main(){
char name[15]={"洛羽晨"};
char *pname=name;
STU st[5];
sc(st,5);
mz(st,5,pname);
return 0;
}
结果如下:
这里传数组或是数组指针都差不多,区别就是入参的写法。输入和输出和二维数组时一样,都是使用for循环来进行,根据人名查询时使用if来判断。
2.结构体嵌套指针
我们可以在定义一个结构体的时候,定义一个指针,这个指针指向另一个结构体,示例如下:
typedef struct home{
int id;
char name[20];
char addr[20];
}HOME;
typedef struct per{
char name[20];
int age;
HOME *home;
} PER;
练习如下:使用结构体指针嵌套,输入输出成绩,姓名等。代码如下:
#include<stdio.h>
#include<string.h>
typedef struct stu{
char name[15];
int age;
}HOM;
typedef struct person{
char addr[20];
HOM *home;
}PER;
int sc(PER *per,int x){
int s;
for(s=0;s<x;s++){
scanf("%s%s%d",per[s].addr,per[s].home->name,&per[s].home->age);
}
return 0;
}
int pri(PER *per,int x){
int s;
for(s=0;s<x;s++){
printf("%s %s %d\n",per[s].addr,per[s].home->name,per[s].home->age);
}
return 0;
}
int main(){
HOM home;
PER per[5];
sc(per,5);
pri(per,5);
return 0;
}
总结:今天学习的,时结构体的运用部分,讲了如何运用结构体来解决实际问题。心得体会是感觉基础不怎么牢固,需要多努力练习。