2010-07-25 10 views
0

첫 번째 C 프로그램을 만들고 2D 배열을 사용하며 코드가 이상하게 보입니다. 첫째, [1] [6]에 "White"를 저장해야하는 이유는 무엇입니까? 나는 [0] [6]을 시도했지만 컴파일러는 불평하고 실행하지 않을 것이다. 그러나 나는 printf에서 그것을 호출 할 때 [0] [6]이다. 또한 코드 [2] [6]에 "Bl"을 저장하려 할 때 코드에 대해 상충되는 유형이 있다고합니다. 어떤 도움을 주시면 감사하겠습니다.2D 배열의 충돌 유형 (C)

int main (int argc, const char * argv[]) { 

for (q=0; q<=457; q++) { 
    for (w=0; w<=6; w++) { 
    codes[q][w] = 0; 
    } 
} 

char codes[1][6] = {'W','h','i','t','e','\0'}; 
char codes[2][6] = {'B','l,'\0'}; 

printf("%c\n", codes[0][0]); 

답변

0
  1. 는이 beucase [0][6] 는 벡터이며, 첫번째 인덱스 요소를 가지고 있겠지 initalize 배열을 기울인다.
  2. 그리고 2D 배열에 1D (벡터) 배열 을 할당 할 수 없습니다. {'W','h','i','t','e','\0'}{'B','l,'\0'}something[6]과 같은 1D 배열이거나 두 번째 경우 something[3]과 같은 1D 배열입니다.
  3. 그리고 변수가 codes 인 트리플 선언이 있습니다. 변수 하나만 선언 할 수 있습니다.
5

수행해야 할 두 가지 작업이 혼란 스럽습니다. 한 가지 작업은 변수를 선언하고 컴파일러에게 어떤 유형을 유지할 것인지 알려주는 것입니다. 두 번째 작업은 데이터를 입력하는 것입니다.

두 작업을 동시에 수행하면 혼란을 겪을 수 있습니다. 첫 번째 문장에서 컴파일러에게 "코드는 2 차원 1x6 배열입니다. 그런데 여기에 넣을 값은"흰색 "입니다." 두 번째 포화 상태는 "코드는 2 차원, 2x6 배열입니다. 그런데"BI "를 넣으십시오."

컴파일러는 "이미 1x6 배열이라고 말했기 때문에 2x6 배열 일 수는 없다"고 불평하고 있습니다.

문자 코드 [2] [6] = {{ 'W', '시간', '난', 't', '전자', '\ 0 :

는 당신이 필요로하는 것은이 같은 것입니다 '}, {'B ','l ', \ 0'}};

그런 다음 코드를보고 당신의 'W'얻을 것 [0] [0] 등 대신 코드

0

[0] [6] 당신은 따라 배열의 크기를 결정하는 컴파일러를 원하는 경우 당신의 초기화에, 당신은 말할 수 :

char codes[][6] = {'W','h','i','t','e','\0'}; 

는 2 차원 배열을 초기화하는하는 경우 :

시도 :

char codes[2][6] = {{'W','h','i','t','e'}, {'B','l'}}; 

또는

char codes[][6] = {{'W','h','i','t','e'}, {'B','l'}}; 
0

할당과 초기화를 혼동하고 있습니다.당신이

char codes[N][6]; 
... 
strcpy(codes[0], "White"); 
strcpy(codes[1], "Bl"); 
... 
같이 선언 후 배열의

char codes[N][6] = { 
    {'W','h','i','t','e',\0}, 
    {'B','l',\0}, 
    ... 
}; 

또는 할당 할 수있는 요소를 작성하는 것과 같습니다

char codes[N][6] = { // where N is the total number of codes 
    "White", // assigns codes[0][0] - codes[0][5] as 'W','h','i','t','e',\0 
    "Bl", // assigns codes[1][0] - codes[1][2] as 'B','l',\0 
    ... 
}; 

에서와 같이, 그것을 선언 할 때 당신도 배열을 초기화 할 수 있습니다

당신이 한 일은 두 가지 방법으로 이루어 지므로 서로 다른 유형의 codes을 재 선언하고 있습니다 (컴파일러는 [0] [6]과 [1] [6]을 배열 크기로 해석합니다. ations), 따라서 컴파일러 오류.