使用C / C ++中的数组动态声明将数组传递给函数

时间:2012-07-21 10:19:57

标签: c++ arrays turbo-c++

我想在C / C ++中传递数组而不先前声明和分配它。 和C#一样,我们可以:

fun(new int[] {1, 1}); //this is a function call for void fun(int[]) type function

我不太确定上述代码的正确性。但我在C#中做过类似的事情。

如何使用动态声明(在现场声明中)将数组传递给函数?

我尝试使用以下方式。但没有运气

fun(int {1,1});
fun(int[] {1,1});
fun((int[]) {1,1});

我们不能这样做.. ??

4 个答案:

答案 0 :(得分:4)

在C99及更高版本中,这是:

foo((int[]){2,4,6,8});

与此大致相同:

int x[] = {2,4,6,8};
foo(x);

在C99之前,这是不可能的。 C ++也不支持这种语法。

答案 1 :(得分:3)

在C ++ 11中,您可以使用初始化列表:

#include <initializer_list>
#include <iostream>

void fun(std::initializer_list<int> numbers)
{
    for (int x : numbers)
        std::cout << x << ' ';
    std::cout << '\n';
}

int main()
{
    fun( {2, 3, 5, 7, 11, 13, 17, 19} );
}

答案 2 :(得分:2)

这在ANSI C99和C11中是可能的,但在C89中则不行。

答案 3 :(得分:1)

我可以建议使用变量参数列表吗?

声明语法如下:

void Function(int Count, ...) {
     va_list va;
     va_start(va, Count);
     for(int i = 0; i < Count; ++i) {
         int nextVar = va_arg(va, int);
         //Do some stuff with the array element
     }
     va_end(va);
}

使用以下函数调用此函数:

Function(4, 2, 3, 1, 5);

2,3,1和5是'数组元素'。

或者,如果您需要在该函数中使用一个数组,则可以使用new和delete将变量列表移动到正确的(动态)数组中。

在va-function中:

 int *Array = new int[Count];
 for(int i = 0; i < Count; ++i) {
      Array[i] = va_arg(va, int);
 }
 //Do Stuff with Array
 delete[] Array;