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

===============>>#1 票数: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);。
然后,您可以为N传递0,并为上一个呼叫传递TRUE。 编写函数以绕过除清除和返回之外的所有代码。

if(cleanup)
{
    free(previousValue);
}

  ask by Nelly Dee translate from so

未解决问题?本站智能推荐:

2回复

将数组传递给C中的函数以存储数据

我是C语言的新手,在这里,我试图从文件中读取整数(由空格分隔)并将它们存储在名为array 。 最初,我将array设置为NULL ,然后将其传递给read_file函数。 在read_file一切正常。 但是,当从堆栈中弹出read_file时, array仍指向NULL而不是rea
2回复

C-返回数组作为函数参数

我试图将字符数组“ p”传递给函数“ func”,并将其复制到函数内部的另一个参数“ arg”。 但是,虽然我可以在'func'中修改'p'的内容并可以验证main函数中的更改,但是数组并未被复制,但是'res'不会与值一起复制来自“ p”。 打印空白。 我不确定自己犯了什么错误。
3回复

C-“混合分配”数组的调用函数

尽管我对tex.stackexchange非常熟悉,而且遇到语法问题,但我还是C语言编程的新手,也是stackoverflow社区的新成员。 我想知道如何动态分配数组的一个维度,而静态分配另一个维度。 我可以在这个问题上找到答案。 我只需要声明一个指向数组的指针,而不是声明一个指针数组
2回复

C-随机数数组函数

这个问题已经在这里有了答案: 是否可以在其范围之外访问局部变量的内存? 20个答案 我正在尝试创建一个函数,该函数创建一个大小为n的数组,里面存储有随机数,我一直在尝试几种选择,但是一旦我在main中使用该数组,就只能正确显示第一个数字。 我正在使用Code
1回复

在C中的单独函数中为数组分配值

我正在尝试编写一个代码,该代码将以双精度类型生成100000个随机数并将其分配给数组。 这应该在要从main调用的单独函数中完成,而且我也不能使用任何全局变量。 该函数应采用double createRandomNumbers()的格式。 但是,创建的数组也应该可以从main函数中使用。
1回复

在二维数组中存储消息的函数(在C编程中)

我要实现的是一个C程序,该程序在用户每次输入名称时都存储名称,如下所示: func1:阅读:约翰 func2打印约翰 func1:阅读:迈克尔 func2打印:约翰打印:迈克尔 我想知道如何使用2个功能而不是单个功能执行此操作。 我有2个功能。 功
2回复

将结构数组传递给C中的值函数

我想将三个结构的数组传递给一个对存储在结构数组中的三个数字进行排序的函数,但是不想更改实际值,因为数组是通过引用传递的,所以我有问题,任何想法都可以接受谢谢 :) 这是我的代码供您查看:
1回复

将字符存储在数组C中

我正在做一个学校项目,为此,我需要获得一个随机的电影标题,并用星号替换角色,用户稍后必须在程序中猜测电影,就像film子手一样。 在下面的函数中,我试图随机生成一个电影标题,然后将其存储。 然后,我想将字母转换为星号,并将它们存储在自己的数组中,以供以后在程序中使用。 但是,我对此
1回复

如果该值存在于C中的数组函数中,则添加值的数量

我在编写用于付款的代码时遇到问题。 如果ISBN编号相同,则必须添加数量,但是它不添加数量,而是使另一个具有相同ISBN的值...我不知道如何在现有值中添加数量。 我认为问题出在searchinventory函数或addbook本身。
2回复

使用c中的函数确定数组的最大值

编写程序需要从用户那里获取n个元素(其中n由用户指定)并将数据存储在数组中。 然后,在屏幕上显示阵列的内容,并使用函数计算和显示最大温度。 我理解这个问题,但是每次尝试时,我总是会出错。 有人可以更正我的代码: 谢谢