在C/C++中通过数组的动态声明将数组传递给函数

Passing array to function with dynamic declaration of array in C/C++

本文关键字:数组 声明 函数 动态 C++      更新时间:2023-10-16

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

我们不能这么做吗。。??

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

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

大致相同:

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

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

在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} );
}

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

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

声明语法如下:

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;