如何给函数传递结构体数组
时间: 2025-03-05 22:05:47 浏览: 38
### 如何在C/C++中将结构体数组传递给函数作为参数
#### 定义结构体并创建结构体数组
为了展示如何将结构体数组传递给函数,先定义一个简单的结构体`Student`表示学生的信息。之后初始化一个由多个这种结构组成的数组。
```c++
struct Student {
int id;
char name[50];
float scores[3]; // 假设有三门课程成绩
};
```
接着可以创建一个这样的结构体数组:
```c++
// 创建三个学生的记录
Student stuArray[] = {
{1, "Zhang San", {89.5f, 78.0f, 92.0f}},
{2, "Li Si", {85.0f, 88.5f, 94.0f}},
{3, "Wang Wu", {76.5f, 82.0f, 88.5f}}
};
```
#### 函数声明与实现
当准备好了要处理的数据后,下一步就是编写接受这些数据的函数。这里以打印每位学生的平均分为例来说明如何接收结构体数组作为参数。
##### 方法一:直接使用结构体数组名称作为参数
可以直接把整个数组的名字当作实际参数传入到形式参数里去。注意此时的形式参数应该是指向特定类型的指针或者是带有未知大小维度的数组。
```c++
void printAverageScores(Student list[], int size) {
for(int i=0; i<size; ++i){
printf("ID:%d Average Score:",list[i].id);
float sum = 0;
for(int j=0;j<3;++j)
sum += list[i].scores[j];
printf("%.2f\n",sum/3);
}
}
```
调用此函数时只需提供数组名以及其长度即可[^3]。
##### 方法二:利用指向结构体的指针
另一种方式是让形参成为指向单个元素(即结构体实例)的指针,并且通常会额外加上传递数组的实际尺寸以便遍历操作。
```c++
void printAveragesWithPointer(Student *ptr, int count) {
while(count--){
printf("ID:%d Average Score:", ptr->id);
float avgScore = (ptr->scores[0]+ptr->scores[1]+ptr->scores[2])/3;
printf("%.2f\n",avgScore);
++ptr;
}
}
```
这种方式下,可以通过解引用运算符访问各个字段的内容,同时也可以通过增加指针位置的方式来迭代访问下一个对象。
##### 调用上述任一函数的方法如下所示:
```c++
int main(){
...
// 使用任意一种方法都可以正常工作
printAverageScores(stuArray,sizeof(stuArray)/sizeof(stuArray[0]));
OR
printAveragesWithPointer(stuArray,sizeof(stuArray)/sizeof(stuArray[0]));
return 0;
}
```
以上就是在C/C++程序设计中关于怎样将结构体数组作为参数传递给其他子过程的具体做法[^1]。
阅读全文
相关推荐















