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

如何用指针访问结构体数组指定索引并计算par2数组的和

结构体指针访问数组元素求和问题解决

现有结构体structure_s,包含int类型成员par1和int数组par2;已定义结构体数组structures[m],需在函数function中通过传入的指针访问该数组指定索引的结构体,计算其par2数组的元素和。

之前尝试(*(ps + index)).par2[j]这类写法时,编译器报“指针指向未定义类型”错误,排查后发现是结构体定义放在了函数声明之后——C语言要求使用结构体类型前必须先完成定义或声明,把结构体定义移到函数前即可解决问题。

修正后的完整代码如下:

// 变量n和m需提前定义(建议用#define声明编译期常量)
#define n 5
#define m 3

// 结构体定义必须放在使用它的函数之前
struct structure_s{
   int par1;
   int par2[n];
};

int function(struct structure_s *ps){
   // 示例:假设已确定目标索引为0
   int index = 0;
   int sum = 0;
  
    for(int j = 0; j < n; j++){
        // 访问指定索引结构体的par2元素并累加求和
        sum += ps[index].par2[j];
        // 等价写法:sum += (*(ps + index)).par2[j];
    }
    return sum;
}

int main(void){
  struct structure_s structures[m];
  // 示例:给结构体数组的par2元素初始化赋值
  for(int i = 0; i < m; i++){
      for(int j = 0; j < n; j++){
          structures[i].par2[j] = j + 1;
      }
  }
  int sum = function(structures);
  // 后续业务逻辑
  return 0;
}

补充说明:

  • 原代码中n和m必须是编译期可确定的常量,用#define声明是最稳妥的方式
  • ps[index].par2[j]和(*(ps + index)).par2[j]是完全等价的写法,前者可读性更强

内容的提问来源于stack exchange,提问作者Not So Witty Kitty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:49:55