首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在函数中创建动态数组(calloc),并在main中使用它

在函数中创建动态数组(calloc),并在main中使用它
EN

Stack Overflow用户
提问于 2018-12-17 11:01:50
回答 1查看 280关注 0票数 2

很抱歉打开一个新的问题,但我在论坛或谷歌周围找不到这样的问题。

无论如何,我的问题是:在Main内部,我声明一个数组"insieme_A“和一个包含数组"nums_element_A”长度的变量。

代码语言:javascript
运行
复制
int main()
{
     double *insieme_A;
     int nums_element_A;

     nums_element_A = get_array(insieme_A);

然后,打印数组:

代码语言:javascript
运行
复制
 int counter;
 printf("\nL'array è costituito dai seguenti elementi: \n");
 for (counter = 0; counter < nums_element_A; ++counter)
       printf("%lf \n", insieme_A[counter]);` 

然后我有一个函数,由一个库导出。在这个函数中,我问用户“数组必须有多少个元素?

然后创建动态数组array = (double *)calloc(nums_elements, sizeof (double));,并在for循环中使用元素填充它。

我的问题是函数何时结束,主要是我试图打印数组。它打印用户插入的元素数。但都是零。

如果用户想要一个5元素数组,它会打印{0,0,0,0,0}

相反,如果我在函数中打印数组,它可以正常工作。所以我想知道..。可以这样做吗,还是应该在文件中写入数组..函数结束后,在主程序内部打开文件并从那里读取数组?

非常感谢

代码语言:javascript
运行
复制
int get_array(double array[])
{
    double element;
    int nums_elements,
    counter;

     do
     {
         printf("Quanti elementi deve contenere l'insieme? ");
         scanf("%d", &nums_elements);
     }
     while (nums_elements <= 0);

     array = (double *)calloc(nums_elements, sizeof (double));

     for (counter = 0;
          counter < nums_elements;
          ++counter)
     {
         printf("Inserire valore %d-->", counter+1);
         scanf("%lf",
                 &element);
         array[counter] =  element;
     }

     for(counter=0;counter<nums_elements;++counter){
        printf("%lf",array[counter]);
     }

     return (nums_elements);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-17 11:17:09

这是因为在代码中,get_array函数的参数是通过值传递的。

要更正它,请将其作为int get_array(double **array)使用,并相应地对代码进行更改。下面是代码片段。请参阅此处完整的工作代码。

代码语言:javascript
运行
复制
int get_array(double **array)
{
    int nums_elements, counter;

    do
    {
        printf("Quanti elementi deve contenere l'insieme? ");
        scanf("%d", &nums_elements);
    } while (nums_elements <= 0);

    *array = (double *)calloc(nums_elements, sizeof (double));

    for (counter = 0; counter < nums_elements; ++counter)
    {
            printf("Inserire valore %d-->", counter+1);
            scanf("%lf", &((*array)[counter]));
    }
    return (nums_elements);
}

要打电话,请执行以下操作:

代码语言:javascript
运行
复制
int count;
double *insieme_A;
count = get_array(&insieme_A);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53813854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档