我有这个二维数组: array <array <int , 4> , 4> myarray
如何在程序中声明它?
//I first include
#include <array>
然后我初始化它
array<array<int,4>,4> myarray = {{
{1, 2, 3, 4},
{5, 6, 0, 8},
{9, 10, 11, 12},
{13, 14, 15, 7}
}};
我宣布我的职能:
void func1(array<array<int,4>,4> );
void func2();
void func3(int&, int&, array<array<int,4>,4>);
void func4(array<array<int,4>,4>);
void func5(array<array<int,4>,4>);
void func6(array<array<int,4>,4>);
写一个主要功能:
int main() {
func1(myarray);
func2();
func3(myarray);
func4(myarray);
func5(myarray);
func6(myarray);
return EXIT_SUCCESS;
}
然后我写了函数
void func1(array<array<int,4>,4> myarray)
{//something
}
void func2();
{//something
}
void func3(int&, int&, array<array<int,4>,4> myarray);
{//something
}
void func4(array<array<int,4>,4> myarray);
{//something
}
void func5(array<array<int,4>,4> myarray);
{//something
}
void func6(array<array<int,4>,4> myarray);
{//something
}
我错了吗?
关键是,初始化数组:{1, 2, 3, 4}, {5, 6, 0, 8}, {9, 10, 11, 12}, {13, 14, 15, 7}
将在第一个函数中输入。第一个函数的输出将是一个不同的4x4数组,例如{15, 14, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {2, 1, 4, 13}
。这个不同的数组将作为输入放在第二个。这个函数的输出将是不同的等等....
我的问题是大多数函数的输出是初始化数组。
提前感谢您的帮助。
答案 0 :(得分:1)
这个过程是这样的。你初始化你的数组:
array<array<int,4>,4> myarray = {{
{1, 2, 3, 4},
{5, 6, 0, 8},
{9, 10, 11, 12},
{13, 14, 15, 7}
}};
然后,在main
中,您拨打func1
。 funct1
的实施是:
void func1(array<array<int,4>,4> myarray)
{//something
}
由于您将func1
声明为void
,这意味着它不会返回值。
array<array<int,4>,4> myarray
是函数func1
的参数的类型。当您从func1
调用函数main
时,您从main
函数传递的变量将被复制到myarray
func1
变量中(这称为pass by value),从逻辑上讲,它是全新的数组。如果要更改函数参数的值,可以使用引用或指针。如果是这样,您的函数的实现将是:
void func1(array<array<int,4>,4> &myarray)
{//something
}
&
符号表示myarray
是您传递给函数的变量的引用。因此,如果在函数func1
中修改myarray
的值,则main
函数中的数组也将被修改(因为您修改了函数func1
中的值)。