在C/C++中通过数组的动态声明将数组传递给函数
Passing array to function with dynamic declaration of array in C/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});
我们不能这么做吗。。??
在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;
相关文章:
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- 在 c++ 中直接访问的内联数组声明
- 由于 2D 数组声明,C++ 14 中的运行时错误
- 如何将char数组声明为函数参数?或告诉我此代码中还有其他问题?
- 来自函数参数的 C++ 静态数组声明
- C++ 中的动态数组声明
- C++数组声明
- 数组声明中的错误:表达式必须具有常量值
- 程序随数组声明崩溃
- 运行时和编译时的数组声明
- C++数组声明和初始化
- 带有常量表达式的数组声明
- C ,数组声明,模板,链接器错误
- 如何用'n'维数组声明 std::vector?
- 数组声明上的编译器错误
- 这是什么数组声明
- 头文件类中的数组声明
- 节点数组声明
- 在静态数组声明中使用了两次C++常量