将动态数组传递给需要类型为double []的函数?

时间:2013-10-31 22:25:43

标签: c arrays

我正在尝试在C中使用具有以下类型

的函数foo的接口
void foo(double x[]);

但是我要传递给此函数的数组x对于堆栈内存来说太大了。有没有办法将动态数组传递给foo,或者增加堆栈内存的大小?

5 个答案:

答案 0 :(得分:1)

在功能签名中,double x[]相当于double *x。无论如何,你正在传递一个指针,指针并不关心它是指向堆上的对象还是指向堆栈上的对象。只需以适当的方式分配您的数组(例如,如果它对于堆栈而言太大,则使用malloc)并将结果指针传递给foo

答案 1 :(得分:1)

你的功能会正常工作。数组参数不会复制到堆栈中,它们总是作为指针传递。您编写的函数声明实际上等同于:

void foo(double *x);

答案 2 :(得分:1)

使用malloc在堆上分配数组。问题不在于功能。相反,问题在于您分配传递给函数的数组。只要在堆上分配数组,就不会溢出堆栈。

答案 3 :(得分:0)

将数组传递给函数时,它会退化为指向基类型的指针,指向第一个元素。

它永远不会传递堆栈中的所有值。

答案 4 :(得分:0)

当函数需要double []时,它等于double *,因为数组会衰减为指针。但请注意,由于sizeof将返回指针的大小,因此您的函数无法找出此数组的大小。您也应该传递大小:

void foo(double x[], int size) {
    ...
}

int main(void) {
    const int N = 10000;
    double *x = malloc(sizeof(double) * N);
    foo(x, N);
    free(x);    // don't forget to clean up
    return 0;
}