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

标签 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

我想删除 *create 中的 *

最佳答案

您可以修改您的代码以设置一个按地址传递给您的函数的指针,如下所示:

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

下面是你现在如何调用这个函数:

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

I want to use only one parameter and be able to do it with a 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 函数。

关于C函数返回指针和动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33132384/

相关文章:

c++ - 多线程妄想症

python - 对残差平方的numpy数组进行快速迭代

r - 是否有 R 函数用于从 "beta + beta*t"这样的字符串创建公式?

java - 如何从 ArrayList (Java) 打印最短的字符串

javascript用不同的单位对距离进行排序

javascript - 如何从输入组件中获取值(学习目的)?

JavaScript 数组比较函数

C中常量定义中的常量定义

c++ - GNU C 和 C++ 链接错误

c - postgres plpgsql参数文本最大长度