2012-12-31 49 views
3

我寫了下面的代碼,期望在運行時得到123456789。然而,相反,我得到了124457789,我可以爲我的生活找出原因。爲什麼我的代碼不能執行我認爲應該執行的操作?C++二維數組:每個元素被賦予一個數字,但輸出是一個不同的數字

如果我改變了數字,第三個和第六個數字仍然與第四個和第七個數字相同。

#include<iostream> 
#include<string> 
#include<cmath> 

using namespace std; 

int main(){ 

    int matrix[2][2]; 
    matrix[0][0]=1; 
    matrix[0][1]=2; 
    matrix[0][2]=3; 
    matrix[1][0]=4; 
    matrix[1][1]=5; 
    matrix[1][2]=6; 
    matrix[2][0]=7; 
    matrix[2][1]=8; 
    matrix[2][2]=9; 

    cout<<matrix[0][0]; 
    cout<<matrix[0][1]; 
    cout<<matrix[0][2]; 
    cout<<matrix[1][0]; 
    cout<<matrix[1][1]; 
    cout<<matrix[1][2]; 
    cout<<matrix[2][0]; 
    cout<<matrix[2][1]; 
    cout<<matrix[2][2]; 
} 

回答

4

你的矩陣是僅僅從[0][0]可轉位通過[1][1],因爲它是一個2x2的聲明。您正在索引到[2][2],因此這是未定義的行爲。

聲明您的矩陣爲matrix[3][3],然後重試。

編輯加載1-9使用模/分循環踢。

int matrix[3][3]; 
for (int i=0;i<9;++i) 
    matrix[i/3][i%3] = (i+1); 

盯着那一段時間,看看您是否瞭解它是如何有相同的結果,你相當大的堆直接分配。同樣地,對印刷面:

for (int i=0;i<9;++i) 
    cout << matrix[i/3][i%3]; 
cout << endl; 
+0

所以當我聲明時,它開始從1開始計數,但是當我真正使用它時,它開始從0開始計數? 謝謝,它現在有效:D – Einherjer

+0

@Einherjer數組在C/C++中是基於'0'索引的。習慣這一點。維度的* size *是一個正數,但索引總是從零開始並運行到'(n-1)',其中'n'是聲明的維度大小。 – WhozCraig

1

應該是一個3x3的陣列,而不是一個2×2:

int matrix[3][3]; 

否則,任何有2索引會導致不確定的行爲。

相關問題