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

Ryw*_*ywi 1 c arrays pointers function c89

我有一个函数创建一个动态数组,其大小与我选择的整数相同.码:

int *create(int n) {
    int *nn;
    nn = (int*)malloc(n*sizeof(int));
    return nn;
}
Run Code Online (Sandbox Code Playgroud)

我在我的电话里称之为 main()

int *nn
int n = 5; /* size = 5 */
nn = create(n);
Run Code Online (Sandbox Code Playgroud)

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

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

das*_*ght 5

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

void create(int n, int** res) {
    *res = malloc(n*sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)

以下是您现在调用此函数的方法:

int *nn
int n = 5;
create(n, &nn);
Run Code Online (Sandbox Code Playgroud)

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

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

int *create(int n) {
    return malloc(n*sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)

该调用也可以与声明结合使用:

int n = 5;
int *nn = create(n);
Run Code Online (Sandbox Code Playgroud)

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

int *nn = malloc(n*sizeof(*nn));
Run Code Online (Sandbox Code Playgroud)

create完全放弃功能.

  • 在这种情况下,"...并完全删除创建函数"是正确的答案,因为`create`除了调用`malloc`之外没有做任何事情. (3认同)