2012-12-31 2 views
3

실행시 123456789를 얻으려는 아래 코드를 작성했습니다. 그러나 그 대신에 나는 124457789를 얻는다. 그리고 나는 나의 인생 동안 이유를 이해할 수있다. 내 코드가 왜 내가해야한다고 생각하는대로하지 않을까요?C++ 2D 배열 : 각 요소에 숫자가 지정되었지만 출력이 다른 숫자입니다

숫자를 변경하면 세 번째와 여섯 번째 숫자는 여전히 네 번째와 일곱 번째 숫자와 같습니다. 이 2 × 선언 같이

#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

내 행렬은 [1][1] 통해 [0][0]에서 인덱싱 만이다. [2][2]으로 인덱싱하고 있으므로 정의되지 않은 동작입니다.

행렬을 matrix[3][3]으로 선언하고 다시 시도하십시오.

EDIT 모듈러/디비전 루프를 사용하여 1-9로로드.

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

잠깐 주목 해 직접적인 과제물 스택과 같은 결과를 얻는 방법을 이해했는지 확인하십시오. 마찬가지로 인쇄면에 :

int matrix[3][3]; 

이 그렇지 않으면, 2 색인 아무것도 정의되지 않은 동작의 원인이됩니다

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'인덱스 기반입니다. 그것에 익숙해 져. 차원의 * 크기 *는 양수이지만 인덱싱은 항상 0에서 시작하여'(n-1)'까지 실행됩니다. 여기서 'n'은 선언 된 차원 크기입니다. – WhozCraig

1

하지 2 × 2, 3 × 3 배열이됩니다.