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_
相关产品推荐
相关产品推荐

