2012-01-24 57 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修改的值)。