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

如何在.c文件中使用.h文件内计算得到的数值进行运算

错误原因

  • rando()函数内定义的base、height、pressure都是局部栈变量,函数执行结束后内存就会被回收,外部完全无法访问,所以会报「赋值后未使用」的警告。
  • main.c里定义的height、pressure都是单double类型,不是数组,自然无法用下标[x]访问,也没法用sizeof计算数组长度。

实现方案(结构体封装返回值)

1. 修改rand.h

#ifndef RAND_H_INCLUDED
#define RAND_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 定义长度宏统一管理数组大小
#define ARR_LEN 20
// 结构体封装所有生成的随机数据
typedef struct {
    double base;
    double height[ARR_LEN];
    double pressure[ARR_LEN];
} RandResult;

RandResult rando()
{
    static int seed_inited = 0;
    // srand全局只需要初始化一次,多次调用会导致随机数重复
    if (!seed_inited) {
        srand(time(NULL));
        seed_inited = 1;
    }
    RandResult res;
    res.base = rand();
    // 生成height数组
    for(int i=0;i<ARR_LEN;i++){
        res.height[i] = rand();
    }
    // 生成pressure数组
    for(int q=0;q<ARR_LEN;q++){
        res.pressure[q] = rand();
    }
    return res;
}
#endif // RAND_H_INCLUDED

2. 修改main.c

#include <stdio.h>
#include <stdlib.h>
#include "rand.h"

int main() /*table formatting testing*/
{
    // 调用函数获取所有随机数据
    RandResult res = rando();
    int hnum = ARR_LEN;
    int pnum = ARR_LEN;
    
    /*打印height*/
    int hloop;
    for (hloop=0;hloop<hnum;hloop++){
        if (hloop==0){
            printf("     %g", res.height[hloop]);
        }  else{
            printf(" %g", res.height[hloop]);
        }
    }
    /*打印base和pressure*/
    printf("\n");
    int ploop;
    for (ploop=0;ploop<pnum;ploop++){
        if (ploop==0){
            printf("%g %g", res.base, res.pressure[ploop]);
        } else{
            printf(" %g", res.pressure[ploop]);
        }
    }
    return 0;
}

注意事项

  • 局部变量的作用域仅限当前函数内部,跨函数传递数据可以用返回值、传入的指针参数两种方案,全局变量因为线程安全、可重入性问题不推荐使用。
  • srand(time(NULL))不需要每次调用随机函数都执行,全局初始化一次即可。

内容的提问来源于stack exchange,提问作者J.D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:06:01