繁体   English   中英

C-将值存储在函数中的数组中

[英]C - Storing values in array in a function

问题:有没有一种方法可以在函数内部存储(malloc / free)数组,以便如果我在主函数中多次调用该函数,它可以调用上一次调用它时生成的数组。

详细信息:我需要使用原型创建一个函数:

double* Wee(int N)

返回大小为N的数组。

反复调用该函数以增加N的不同值。假设N = 4,则数组值类似于:

0.02 0.45 0.21 0.38

如果N现在等于6,则数组值为:

0.02 0.45 0.21 0.38 0.56 0.81

有什么方法可以让我记住该4个值:0.02 0.45 0.21 0.38,这样当我下次调用N = 6时,就不需要再次计算这些值了吗?

目前,我的N = 6数组如下所示:

-6.27744e+066 -6.27744e+066 -6.27744e+066 -6.27744e+066 0.56 0.81

评论中已经回答了这个问题,但这是一个实现:

#include <ansi_c.h>

double * wee(int N);

int main(void)
{

    double * x;
    x = wee(4);
    //use x somehow;
    free(x);
    x = wee(6);
    //use x somehow;
    free(x);
    return 0;   
}

double * wee(int N)
{
    static int firstIn=1;
    int i;
    double *value;
    static double *previousValue;
    static int previousN = 0;

    srand(clock());

    value = malloc(sizeof(double)*N);

    //populate newly reallocated value with previousValues up to previousN
    for(i=0;i<previousN;i++)
    {
        value[i] = previousValue[i];    
    }

    //reallocate previousValue array to new size
    if(firstIn) 
    {
        previousValue = malloc(sizeof(double)*N);
        firstIn = 0;//do this only once
    }
    else
    {
        previousValue = realloc(previousValue, N);  
    }

    //now you are ready to put fresh numbers into newest elements of array
    for(i=previousN;i<N;i++)
    {
        value[i] = (double)rand();//populate only new array elements
        previousValue[i]=value[i];
    }
    previousN = N;


    return value;
}

注意:释放double * previousValue可以通过传递附加参数来实现,例如double * wee(int N,BOOL cleanup);。
然后,您可以为N传递0,并为上一个呼叫传递TRUE。 编写函数以绕过除清除和返回之外的所有代码。

if(cleanup)
{
    free(previousValue);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM