我想在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});
我们不能这样做.. ??
答案 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;