C ++将数组直接传递给函数而不首先初始化它

时间:2015-03-31 04:20:43

标签: c++ arrays

假设您已创建此功能:

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

4 个答案:

答案 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});