2015-11-18 3 views
0

Я делаю игру с tic tac toe. Я пытаюсь передать многомерный массив в функцию.C++ pass 2D-массив как аргумент функции?

Это мой код:

void printBoard(int board[3][3]) { 

    for (int j = 1; j < 4; j++) { 
     for (int i = 1; i < 4; i++) { 
      if (board[j - 1][i - 1] == 0) 
       cout << "_ "; 
      if (board[j - 1][i - 1] == 1) 
       cout << "O "; 
      if (board[j - 1][i - 1] == 2) 
       cout << "X "; 
      if ((i % 3 == 0)) 
       cout << "\n"; 
     } 
    }//end 1st for 
}//end function 

Я продолжаю получать ошибки. Я провел исследование, и я успешно передал массив 1D в качестве аргумента, используя указатели.

Вот этот код:

void display(int *p, int len){ 

    for (int i = 0; i < len; i ++){ 
     std::cout << "\n" << *(p + i); 
    }//end for 
}//end function 

Как я могу сделать это с несколько массивом?

+1

ничего плохого с кодом вообще. Не могли бы вы также указать ошибки –

+1

, не могли бы вы показать нам, как вы вызываете функцию. –

+0

Здесь около миллиона дубликатов, я не вижу, как это добавляет какую-либо ценность для будущих исследований. –

ответ

0

Это синтаксис для передачи массива в аргумент.

Во-первых, при создании своей функции оставьте первое число в скобке. Ie

void printBoard(int board[][3]){} 

И при вызове вашей функции сделайте это.

printBoard(board); 

Извините, если странно отвечать на ваш вопрос, но это очень помогло мне. Предоставлено http://www.geeksforgeeks.org/pass-2d-array-parameter-c/

0

Я бы очень рекомендовал использовать стиль указателя. Для 2D массива это будет выглядеть так:

void display(int **board, int width, int height) { 
    for (int i = 0; i < width; i++) { 
    for (int j = 0; j < height; j++) { 
     if (board[i][j] == ... 
+1

Предостережение:' int board [3] [3] 'не распадается на' int ** ' – user4581301

1

Предполагая

int board[3][3]; 
//.. 
printBoard(board); 

Ниже (и ваш метод) правильно:

void printBoard(const int (&board)[3][3]) { 
    for (const auto& a : board) { 
     for (int e : a) { 
      switch (e) { 
       case 0: std::cout << "_ "; break; 
       case 1: std::cout << "O "; break; 
       case 2: std::cout << "X "; break; 
      } 
     } 
     std::cout << "\n"; 
    } 
} 
Смежные вопросы