C语言中如何将结构体变量或其成员作为函数参数传递?
两种正确实现结构体成员平均值计算的方式
原代码的核心问题
- 全局变量的成员赋值不能直接写在函数外部,必须放在函数(如
main)内部或初始化时完成 - 不能直接对结构体变量做算术运算,必须访问其内部成员
- 函数参数类型和调用时传入的参数类型不匹配
方案一:直接传递结构体的temp成员(int类型)
如果只需要结构体中的temp成员计算平均值,直接将函数参数改为int类型即可,调用时传入各结构体的temp成员:
#include <stdio.h> #include <stdint.h> typedef struct { int temp; int hum; int oxy; } Data; // 声明全局结构体变量 Data sens1; Data sens2; Data sens3; // 参数改为int类型,接收temp成员的值 int ort(int temp1, int temp2, int temp3) { int avg = ((temp1 + temp2 + temp3) / 3); return avg; } int main(void) { // 全局变量的成员赋值必须放在函数内部 sens1.temp = 5; sens2.temp = 10; sens3.temp = 15; // 传入结构体的temp成员 printf("%d", ort(sens1.temp, sens2.temp, sens3.temp)); return 0; }
方案二:传递整个结构体变量
如果需要传递完整的结构体变量,函数参数保留Data类型,但计算时要访问每个结构体的temp成员:
#include <stdio.h> #include <stdint.h> typedef struct { int temp; int hum; int oxy; } Data; Data sens1; Data sens2; Data sens3; // 参数为Data结构体类型 int ort(Data sens_a, Data sens_b, Data sens_c) { // 访问每个结构体的temp成员进行计算 int avg = ((sens_a.temp + sens_b.temp + sens_c.temp) / 3); return avg; } int main(void) { sens1.temp = 5; sens2.temp = 10; sens3.temp = 15; // 传入完整的结构体变量 printf("%d", ort(sens1, sens2, sens3)); return 0; }
内容的提问来源于stack exchange,提问作者turqay mammadov
相关产品推荐
相关产品推荐

