结构体数组传参与使用
时间: 2023-12-18 15:29:08 浏览: 24
结构体数组可以作为参数传递给函数,函数可以对结构体数组进行操作,也可以返回结构体类型或结构体类型的指针。下面是一个结构体数组的例子:
假设我们有一个结构体类型为`student`,包含`name`和`age`两个成员变量,现在我们要定义一个包含三个`student`类型元素的结构体数组,并将其作为参数传递给函数`print_students`,输出每个学生的姓名和年龄。
```python
# 定义结构体类型
class student:
def __init__(self, name, age):
self.name = name
self.age = age
# 定义结构体数组
students = [student('Tom', 18), student('Jerry', 19), student('Mike', 20)]
# 定义函数,输出每个学生的姓名和年龄
def print_students(students):
for s in students:
print('Name:', s.name, 'Age:', s.age)
# 调用函数
print_students(students)
```
输出结果为:
```
Name: Tom Age: 18
Name: Jerry Age: 19
Name: Mike Age: 20
```
相关问题
大的结构体数组传改变其内容
同样地,可以通过结构体指针方式来改变一个大的结构体数组中的内容,具体步骤如下:
1. 定义大的结构体类型和结构体数组;
2. 通过结构体指针遍历结构体数组,修改结构体数组中的内容。
示例代码如下:
```c
#include <stdio.h>
// 定义大的结构体类型
struct LargeStruct {
int id;
char name[20];
float score;
};
int main() {
// 定义大的结构体数组
struct LargeStruct largeStructs[3] = {
{1, "Tom", 89.5},
{2, "Jerry", 78.0},
{3, "Mike", 92.5}
};
// 定义大的结构体指针,指向大的结构体数组
struct LargeStruct *p = largeStructs;
// 遍历大的结构体数组,修改其中一个结构体的信息
for (int i = 0; i < 3; i++) {
if (p->id == 2) {
p->score = 85.0;
}
p++;
}
// 输出修改后的大的结构体数组
for (int i = 0; i < 3; i++) {
printf("id: %d, name: %s, score: %.1f\n", largeStructs[i].id, largeStructs[i].name, largeStructs[i].score);
}
return 0;
}
```
在这个示例中,我们定义了一个大的结构体类型 `LargeStruct`,包含一个 ID、一个姓名和一个成绩。然后我们在 `main` 函数中定义了一个包含三个大的结构体信息的结构体数组 `largeStructs`,并定义了一个大的结构体指针 `p`,指向结构体数组的首地址。
接着,我们通过遍历大的结构体数组的方式来访问结构体数组中的元素,判断如果当前大的结构体指针指向的结构体的 ID 为 2,则修改该结构体的成绩。最后输出修改后的大的结构体数组。
需要注意的是,在修改大的结构体数组中的元素时,同样可以通过指针方式来访问大的结构体数组中的元素。在这个示例中,我们通过指针 `p` 来访问大的结构体数组中的元素,并修改其中一个结构体的信息。修改后的大的结构体数组中,ID 为 2 的结构体的成绩已经被修改为新的值。
如何使用结构体数组指针遍历结构体数组的所有元素?
使用结构体数组指针遍历结构体数组的所有元素可以按照以下步骤进行:
1. 声明一个结构体类型和一个结构体数组指针变量
2. 动态分配结构体数组所需的内存空间
3. 初始化结构体数组中的元素
4. 使用结构体数组指针遍历结构体数组的所有元素
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Student {
char name[20];
int age;
float score;
};
int main() {
struct Student *pStu; // 声明结构体数组指针
int n = 3; // 结构体数组的元素个数
// 动态分配内存空间
pStu = (struct Student *)malloc(n * sizeof(struct Student));
// 初始化结构体数组
for (int i = 0; i < n; i++) {
sprintf((pStu + i)->name, "Student%d", i+1);
(pStu + i)->age = 18 + i;
(pStu + i)->score = 60.0 + i;
}
// 遍历结构体数组的所有元素
for (int i = 0; i < n; i++) {
printf("Name: %s, Age: %d, Score: %.1f\n", (pStu + i)->name, (pStu + i)->age, (pStu + i)->score);
}
// 释放内存空间
free(pStu);
return 0;
}
```