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

标签 c arrays function

问题:有没有一种方法可以在函数中存储(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

最佳答案

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

#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);
}

关于C - 在函数中将值存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23184462/

相关文章:

java - 从现有数组中创建新数组错误

java - 在洪水填充游戏中显示颜色时遇到问题

python - 内置函数不适用于 Spyder

c - 在 C (Windows) 中使用 USB

c++ - 使用 netfilter 以原始形式获取数据包

c - 在 OpenACC pragma 行中使用结构数据类型

python - 使用函数修改变量但在另一个函数内部的最佳方法是什么?

objective-c - 如何在 NSLog() 中打印 unsigned char*

ios - 如何在 iOS swift 中使用 RealmSwift 创建类似 firebase 结构的模型?

c - 从#define 函数返回一个字符串