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

如何无需临时结构体变量直接将结构体赋值到数组中?

解决循环内临时结构体变量的问题

嘿,这个需求很合理——确实没必要在循环里反复创建临时的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:34