1

我想将数组传递给 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

4 回答 4

4

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

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

与此大致相同:

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

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

于 2012-07-21T10:24:29.403 回答
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} );
}
于 2012-07-21T11:28:38.580 回答
2

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

于 2012-07-21T10:29:53.720 回答
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 函数内:

 int *Array = new int[Count];
 for(int i = 0; i < Count; ++i) {
      Array[i] = va_arg(va, int);
 }
 //Do Stuff with Array
 delete[] Array;
于 2012-07-21T10:30:18.180 回答