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

C语言中如何将函数返回的指针赋值给结构体数组?

问题解决方法

错误原因

你定义的weather是结构体数组(包含1440个Weather对象),直接使用weather.temperature属于语法错误——数组本身没有temperature这类成员,只有数组中的每个Weather结构体实例才有这些成员。另外,generateRandom返回的是静态float数组的指针,若在循环中直接多次调用,后续调用会覆盖静态数组的内容,导致所有成员最终都被最后一次生成的随机值覆盖,这也是需要避免的问题。

修正后的代码

1. 修改readWeather函数

先一次性生成所有需要的随机数组,再遍历结构体数组逐个赋值:

void readWeather() {
    // 先生成四组随机数据,保存指针
    float* tempArray = generateRandom(40, 20);
    float* windArray = generateRandom(20, 0);
    float* humidArray = generateRandom(100, 0);
    float* precipArray = generateRandom(20, 0);

    // 遍历结构体数组,为每个元素的成员赋值
    for (int i = 0; i < NUMDATA; ++i) {
        weather[i].temperature = tempArray[i];
        weather[i].wind = windArray[i];
        weather[i].humidity = humidArray[i];
        weather[i].precipitation = precipArray[i];
    }
}

2. 补充随机数种子初始化

在main函数开头添加随机数种子初始化,避免每次运行生成完全相同的随机序列:

#include <cstdlib>
#include <ctime>

int main() {
    srand(time(nullptr)); // 初始化随机数生成器
    readWeather();
    // 后续逻辑...
    return 0;
}

额外说明

  • generateRandom中的静态数组array是全局生命周期,每次调用该函数都会重新填充这个数组,因此必须先把四组随机数据都保存到不同的指针变量中,再进行赋值操作。
  • 访问数组中的结构体成员时,必须通过下标weather[i]定位到具体的结构体实例,再用.访问其成员;如果是指针类型的结构体,则用->访问。

内容的提问来源于stack exchange,提问作者AmierLuQ_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:05:24