C函数返回指针和动态数组

时间:2015-10-14 17:57:44

标签: c arrays function pointers c89

我有一个函数可以创建一个与我选择的整数大小相同的动态数组。代码:

int *create(int n) {
    int *nn;
    nn = (int*)malloc(n*sizeof(int));
    return nn;
}

我在main()

中称之为
int *nn
int n = 5; /* size = 5 */
nn = create(n);

我想我得到的部分int *create(...)应该将地址返回到我返回的nn的第一个位置。但是我想知道,有没有办法不在函数中使用指针而是修改return nn;部分,以便我仍然返回动态数组nn的地址?

编辑我很抱歉没有正确澄清一件事,我想要做的就是删除`创建中的*

2 个答案:

答案 0 :(得分:5)

您可以修改代码以设置通过地址传递到函数中的指针,如下所示:

void create(int n, int** res) {
    *res = malloc(n*sizeof(int));
}

以下是您现在调用此功能的方法:

int *nn
int n = 5;
create(n, &nn);
  

我只想使用一个参数,并且能够使用return

您可以直接返回malloc的结果,因为这无论如何都是您的功能所在:

int *create(int n) {
    return malloc(n*sizeof(int));
}

呼叫也可以与声明结合使用:

int n = 5;
int *nn = create(n);

当然,如果你这样做,你也可以做惯用的

int *nn = malloc(n*sizeof(*nn));

并完全删除create功能。

答案 1 :(得分:0)

你可以这样做:

int *create(int n) 
{
    return malloc(n*sizeof(int));
}

这样您在create()函数中不需要临时变量。但我没有看到制作一个仅调用malloc的函数的重点。

如果希望函数返回一个整数数组,则需要使用int *create()形式的函数,因为数组可以被认为是指向其第一个元素的指针,在您的情况下是一个整数。