【问题标题】:dynamically sized array in C using a function使用函数在C中动态调整大小的数组
【发布时间】:2014-08-28 02:57:33
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

void dim(int*,int);
int main()
{
    int *array ;
    int n,i;
    scanf("%d",&n);
    dim(array,n);

    for(i=0;i<n;i++)
        scanf("%d",&array[i]);
    for(i=0;i<n;i++)
        printf("%2d",array[i]);
}

void dim(int *array,int n){
    array=malloc(n* sizeof(int));
}

为什么这不起作用?我不能这样做吗?

我不能通过函数给数组一个维度?

我试图在 Internet 上找到它是如何工作的,但我找不到任何东西,所以我更愿意将其发布在这里以获得直接答案。

谢谢!对不起我的英语。

【问题讨论】:

    标签: c arrays memory dynamic


    【解决方案1】:

    函数中的array是传值的,你在dim中分配的不影响main中的array,是内存泄漏。

    相反,传递一个指向指针的指针:

    void dim(int **array,int n){
        *array=malloc(n* sizeof(int));
    }
    

    然后这样称呼它:

    dim(&array,n);
    

    【讨论】:

    • @exsnake 如果您需要修改int,那么指向int 的指针就足够了。但是这里需要修改一个指向int的指针,那么就需要使用一个指向int的指针。
    【解决方案2】:

    您正在按值传递指针,因此 dim 对它没有任何作用。您需要将一个指针传递给您的函数,如下所示:

    void dim(int **array, int n) {
        *array=malloc(n * sizeof(int));
    }
    

    然后像这样传入你的数组:

    dim(&array, n);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-02
      • 2020-11-28
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      相关资源
      最近更新 更多