问题:有没有一种方法可以在一个函数中存储(malloc / free)数组,这样如果我在main中多次调用该函数,它就会调用上一次调用它时生成的数组。
详细信息:我需要使用prototype创建一个函数:
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
答案 0 :(得分:0)
问题已在评论中得到解答,但这是一个实施:
#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);
然后你可以传递0代表N,并为你的最后一次通话传递TRUE。编写函数以绕过除清理之外的所有代码并返回。
if(cleanup)
{
free(previousValue);
}