如何用指针访问结构体数组指定索引并计算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
相关产品推荐
相关产品推荐

