如何无需临时结构体变量直接将结构体赋值到数组中?
解决循环内临时结构体变量的问题
嘿,这个需求很合理——确实没必要在循环里反复创建临时的t变量,这里有两种简单的方式可以实现你的目标:
方式1:直接给数组元素的成员赋值
你可以跳过临时变量,直接对data数组中对应元素的val和source成员逐一赋值,代码清晰直观:
// Structure to store tuples of data struct tuple { double val; int source; // 1 or 2, as in sample1 or sample2 }; // Assume both samples are of length n double function(double* sample1, double* sample2, int n) { struct tuple data[n*2]; for (int i = 0; i < n; i = i + 2) { // 直接赋值,无需临时变量t data[i].val = sample1[i]; data[i].source = 1; data[i+1].val = sample2[i]; data[i+1].source = 2; // 这里继续你的后续处理逻辑 } // 注意:原来的代码在循环内直接return会导致函数第一次循环就退出,记得修正这里的逻辑 return some_calculated_value; }
方式2:使用C99复合字面量(更简洁)
如果你使用的是C99或更高版本的编译器,可以用复合字面量直接生成结构体实例并赋值,写法更紧凑:
// Structure to store tuples of data struct tuple { double val; int source; // 1 or 2, as in sample1 or sample2 }; // Assume both samples are of length n double function(double* sample1, double* sample2, int n) { struct tuple data[n*2]; for (int i = 0; i < n; i = i + 2) { // 用复合字面量直接构造结构体并赋值 data[i] = (struct tuple){sample1[i], 1}; data[i+1] = (struct tuple){sample2[i], 2}; // 这里继续你的后续处理逻辑 } return some_calculated_value; }
另外要提醒你一下:原来的代码在循环内部直接写了return value;,这会让函数在第一次循环迭代时就直接退出,大概率是笔误,记得根据你的实际逻辑修正这个地方哦。
内容的提问来源于stack exchange,提问作者kingledion
相关产品推荐
相关产品推荐

