2012-01-24 58 views
0

使用权的的std ::阵列我有这个二维数组:array <array <int , 4> , 4> myarray如何声明和在C++

如何声明是正确的程序?

//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}将在第一输入FUNC。第一个func的输出将是不同的4x4阵列,例如{15, 14, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {2, 1, 4, 13}。这个不同的数组将被放在第二个输入。这个func的输出将是不同的东西等,等等......

问题我有,是大多数函数的输出是初始化数组。

感谢您的帮助提前。

+3

这些函数都没有返回任何东西,或者修改'myarray',因为它们都是自己的副本。你的意思是通过参考吗? '&myarray'? –

+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的参数的类型。当调用函数func1main,可变从main功能通过将被复制到func1myarray变量(这被称为传值),并且在逻辑上,这是完全新的数组。如果你想改变函数参数的值,你可以使用引用或指针。如果是这样,你的执行功能的将是:

void func1(array<array<int,4>,4> &myarray) 
      {//something 
      } 

&符号表示myarray是你传递给函数的变量的引用。所以,如果在功能func1,你修改的myarray值,然后在main功能阵列也将体改(因为你在功能func1修改的值)。