2016-10-15 4 views
0

기본적으로 아래 코드에서 2 차원 배열을 초기화하는 함수가 있습니다. main 함수에서 배열의 크기가 다른 함수를 테스트하려고합니다. 그러나 다음과 같은 오류가 발생합니다. "오류 : 배열 형식에 불완전 요소 유형이 있습니다. void 체스 보드 (문자 보드 [] [], int 길이, int 너비)"및 "오류 : 형식 매개 변수 1 형식이 불완전합니다". 체스 보드 (보드 1, 길이 1, 너비 1) ;. 어떤 제안?2 차원 배열 형식 오류

#include <stdio.h> 
    #include <stdlib.h> 

    void chessBoard(char board[][], int length, int width) 
    { 
     for (int i = 0; i < length; i++) 
     { 
     for (int j = 0; j < width; j++) 
      if ((i + j) % 2 == 0) 
      board[i][j] = 'b'; 
      else 
      board[i][j] = 'w'; 
     } 
    } 

    int main() 
    { 
     char board1 [3][4]; 
     int length1 = sizeof board1/sizeof board1[0]; 
     int width1 = sizeof board1[0]/sizeof(int); 
     chessBoard(board1, length1, width1); 
     int i, j; 
     for(i = 0; i < length1; i++) 
     { 
     for(j = 0; j < width1; j++) 
      printf("%c", board1[i][j]); 

     printf("\n"); 
     } 
     printf("\n"); 
} 
+0

'무효 체스 (숯 보드 [] [], INT 길이 INT 폭)'-> '무효 체스 (INT 폭 숯 보드 [] [폭] INT 길이)''를 sizeof (int)'->'sizeof (char)' – BLUEPIXY

+0

함수 인자에 배열이있는 것은 실제로 배열이 아니라 * 포인터 *라는 것입니다. int arr []과 같은 인수를 선언하더라도 컴파일러는이를 'int * arr'으로 처리합니다. –

답변

0

이 같은 함수를 선언해야합니다

void chessBoard(char board[][4], int length, int width) 

C FAQ 철저하게 이유를 설명합니다. 요지는 포인터가 포인터로 한번 쇠퇴한다는 것입니다. 재귀 적으로 발생하지는 않습니다. 배열 배열은 포인터에 대한 포인터가 아니라 배열에 대한 포인터로 붕괴됩니다. C 표준에 따르면 모든 차원을 상수로 지정하는 경우 (공백 일 수 있음) 모든 차원 배열을 함수에 전달할 수 있습니다.

+2

C99 (컴파일러가 가변 길이 배열 인 VLA를 지원하는 경우 C11)에서는 배열 크기가 상수 일 필요는 없습니다. 'void chessBoard (int 길이, int 너비, char 보드 [길이] [너비]) 및 이와 유사한 정의를 사용할 수 있습니다. –

+0

"이 같은 함수를 선언하는 것"은'4'에서 두 번째 크기를 고정시킵니다. 이것은 분명 OP가 필요로하는 것이 아닙니다. – AnT

0

다음과 같이 함수를 선언 할 수도 있습니다. void chessBoard(char board[][width], int length). int width은 전역 변수입니다.

#include <stdio.h> 
#include <stdlib.h> 
int width;//Global Variable 
void chessBoard(char board[][width], int length){ 
    int i,j; 
    for (i = 0; i < length; i++){ 
     for (j = 0; j < width; j++){ 
      if ((i + j) % 2 == 0) 
       board[i][j] = 'b'; 
      else 
       board[i][j] = 'w'; 
     }//inner loop end 
    }//outer loop end 
} 
int main(){ 
    char board1[3][4]; 
    int length1 = sizeof(board1)/sizeof(board1[0]); 
    int width1 = sizeof(board1[0])/sizeof(board1[0][0]); 
    width = width1; 
    chessBoard(board1, length1); 
    int i, j; 
    for(i = 0; i < length1; i++){ 
     for(j = 0; j < width1; j++) 
      printf("%c ", board1[i][j]); 
      printf("\n"); 
    } 
    printf("\n"); 
}