C语言结构体数组作为函数参数传递(2种方法)
在C语言中,结构体数组作为函数参数传递是一种常见且有用的编程方法,这种方法允许我们将多个相关数据组合在一起,并以数组的形式传递给函数。
定义结构体
我们首先需要定义一个结构体。假设我们要创建一个表示学生信息的结构体:
struct Student { char name[50]; int age; float gpa; };
这个结构体包含了学生的姓名、年龄和平均成绩(GPA)。
创建结构体数组
接下来,我们可以创建一个包含多个学生信息的结构体数组:
struct Student students[3] = { {"Alice", 20, 3.8}, {"Bob", 22, 3.5}, {"Charlie", 21, 3.9} };
将结构体数组作为函数参数传递
现在,让我们创建一个函数,该函数接受结构体数组作为参数。有两种主要方法可以实现这一点:
1) 使用数组语法
void printStudents(struct Student students[], int size) { for (int i = 0; i < size; i++) { printf("Name: %s, Age: %d, GPA: %.2f\n", students[i].name, students[i].age, students[i].gpa); } }
2) 使用指针语法
void printStudents(struct Student *students, int size) { for (int i = 0; i < size; i++) { printf("Name: %s, Age: %d, GPA: %.2f\n", (students + i)->name, (students + i)->age, (students + i)->gpa); } }
这两种方法在功能上是等价的。在C语言中,当数组作为参数传递时,实际上传递的是指向数组第一个元素的指针,因此,这两种语法都是有效的,选择哪种主要取决于个人偏好和代码可读性。
调用函数
在 main 函数中,我们可以这样调用上述函数:
int main() { struct Student students[3] = { {"Alice", 20, 3.8}, {"Bob", 22, 3.5}, {"Charlie", 21, 3.9} }; int size = sizeof(students) / sizeof(students[0]); printStudents(students, size); return 0; }
运行这段代码,我们将得到以下输出:
Name: Alice, Age: 20, GPA: 3.80 Name: Bob, Age: 22, GPA: 3.50 Name: Charlie, Age: 21, GPA: 3.90
总结
结构体数组在处理大量相似对象时特别有用,如学生记录、商品库存或任何需要批量处理的数据。在使用结构体数组作为函数参数时,有几点需要特别注意:
1) 数组大小
由于 C 语言不会自动传递数组的大小信息,我们需要额外传递一个表示数组大小的参数。这就是为什么在上面的例子中,我们同时传递了 students 数组和 size 参数。
2) 内存效率
传递结构体数组实际上是传递指针,而不是复制整个数组。这意味着传递大型结构体数组也是高效的,不会占用额外的内存。
3) 修改数组
在函数内部对结构体数组的修改会影响原始数组。如果你不希望修改原始数据,可以考虑使用 const 关键字:
void printStudents(const struct Student *students, int size) { // 函数体 }
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。