使用函数在C中动态调整大小的数组

时间:2014-08-28 02:57:34

标签: c arrays memory dynamic

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

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

我无法通过函数给数组赋一个维度?

我试图在互联网上找到它是如何工作的,但我发现任何东西,所以我更喜欢在这里发布以便直接回答。

谢谢!抱歉我的英语。

2 个答案:

答案 0 :(得分:6)

函数中的array按值传递,您在dim中分配的内容不会影响array中的main,它是{\ n} {}记忆泄漏。

而是将指针传递给指针:

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

并称之为:

dim(&array,n);

答案 1 :(得分:4)

你按值传递一个指针,所以dim没有对它做任何事情。您需要将指针传递给指向函数的指针,如下所示:

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

然后传递你的数组:

dim(&array, n);