假设您已创建此功能:
void function(int array1[2], int array2[2])
{
// Do Something
}
是否有可能在C ++中做这样的事情
function([1,2],[3,4]);
或许这可以更好地描述为
function({1,2},{3,4});
我知道完成此任务的唯一方法是:
int a[2] = {1,2};
int b[2] = {3,4};
function(a,b);
答案 0 :(得分:4)
在c ++ 11中你可以这样做:
void function(std::array<int, 2> param1, std::array<int, 2> param2)
{
}
将其称为
function({1,2}, {3,4});
答案 1 :(得分:1)
如果由于某种原因不想使用std::array
,可以在C ++ 11中通过const引用传递数组:
// You can do this in C++98 as well
void function(const int (&array1)[2], const int (&array2)[2]) {
}
int main() {
// but not this
function({1, 2}, {3, 4});
}
为了便于阅读,function
可以改写为:
typedef int IntArray[2];
// or using IntArray = int[2];
void function(const IntArray& array1, const IntArray& array2) {
}
答案 2 :(得分:-1)
我不认为你给出的例子可以用于Mustache的回答。
c ++中的 function
只接受你给它的类型。因此,如果您定义如下函数:
void function(int array1[2], int array2[2])
{
// Do Something
}
指定参数必须是int的指针。当您写作[2,3]
或{2,3}
时,它们实际上不是任何类型。我们可以像int a[2] = {2,3}
那样编写的原因是因为在c ++中,每种类型的=
操作都有构造函数。此构造函数将{2,3}
作为参数来构造数组,并将其提供给=
操作数之前的变量。
所以这里的问题是=
操作不会返回任何内容,因此如果你给它一个参数,那么函数是不可接受的:int a = 0
,这会赢得&#39; t将a
返回给函数。
但是这里有一些其他有趣的函数可以返回一些东西,所以它们可以用作参数。
void somefunction(int a) {
printf("This is the argument: %d!\n" a);
}
int main() {
somefunction(printf("Guess if I could compile and run!\n"));
return 0
}
这是一个非常简单的例子。您可以尝试自己运行,如果我输入正确(我没有在编译器中使用此代码但类似的代码编译),这应该打印出两行:
Guess if I could compile and run!
This is the argument: (somenumber)!
这是因为函数printf
总是返回它打印的字符数,尽管在大多数情况下我们并不关心它。所以只要thing
(可以是任何东西,函数或变量)赋予函数相同类型的参数,函数就会接受它,否则,它不会让你通过编译。 / p>
希望这有帮助。
答案 3 :(得分:-3)
自从我完成C ++以来已经有一段时间了,但如果我没记错的话,如果没有传递给函数,你可以指定参数的默认值。我想你可以为数组值而不是int做同样的事情。请参阅下面的示例。
function(int a = 1, int b = 2);
function(int a [5] = { 16, 2, 77, 40, 12071}, int b[1] = {2});