结构体进阶

系列文章目录

结构体数组与数组遍历
结构体数组与数组参数
结构体与指针

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

结构体数组与数组遍历
结构体数组与数组参数
结构体与指针


前言

前面已经学过了用结构体表示一个人的基本信息,包括姓名、年龄和性别。在主函数中创建一个这样的结构体变量,输入其信息并输出。但是,编写一个函数,接受一个结构体数组和数组长度作为参数,遍历该数组并输出每个元素的信息又该如何


提示:以下是本篇文章正文内容,下面案例可供参考

一、 结构体数组与数组遍历

可以先创建一个结构体数组,再定义一个函数遍历结构体,最后

调用函数遍历输出

结构体数组
代码如下:


```c
#include <stdio.h>
struct person {
char name[20];
int age;
char gender;
};
void print_person(struct person arr[], int len) {
for (int i = 0; i < len; i++) {
printf("Person %d: Name: %s, Age: %d, Gender: %c\n", i + 1, arr[i].name,
arr[i].age, arr[i].gender);
}
}
int main() {
struct person p[3] = {
{"Alice", 20, 'f'},
{"Bob", 25, 'm'},
{"Charlie", 30, 'm'}
};
print_person(p, 3);
return 0;
}

# 二、结构体数组与数组参数
如果要编写一个函数,接受一个结构体数组和数组长度作为参数,查找其中年龄最大的人,并返回其下标,这就需要结构体与数组知识的中和了,我们可以先创建一个结构体,再用**for 循环遍历找出其中年龄最大的,用赋值该结构体的数组的个数即为遍历的次数**
代码如下:

```c
#include <stdio.h>
struct person {
char name[20];
int age;
char gender;
};
int find_oldest(struct person arr[], int len) {
int oldest_index = 0;
for (int i = 1; i < len; i++) {
if (arr[i].age > arr[oldest_index].age) {
oldest_index = i;
}
}
return oldest_index;
}
int main() {
struct person p[3] = {
{"Alice", 20, 'f'},
{"Bob", 25, 'm'},
{"Charlie", 30, 'm'}
};
int oldest_index = find_oldest(p, 3);
printf("The oldest person is %s, age %d.\n", p[oldest_index].name,
p[oldest_index].age);
return 0;
}

三. 结构体与指针

如果需要编写一个函数,接受一个结构体指针作为参数,并输出该结构体的信息。在这里可以利用指针和数组的转化,也可以直接定义一个指向结构体的指针
代码如下:

#include <stdio.h>
struct person {
char name[20];
int age;
char gender;
};
void print_person(struct person *p) {
printf("Name: %s, Age: %d, Gender: %c\n", p->name, p->age, p->gender);
}
int main() {
struct person p = {"Alice", 20, 'f'};
print_person(&p);
return 0;
}