You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何将结构体变量或其成员作为函数参数传递?

两种正确实现结构体成员平均值计算的方式

原代码的核心问题

  1. 全局变量的成员赋值不能直接写在函数外部,必须放在函数(如main)内部或初始化时完成
  2. 不能直接对结构体变量做算术运算,必须访问其内部成员
  3. 函数参数类型和调用时传入的参数类型不匹配

方案一:直接传递结构体的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:39:51