2015-11-18 113 views
0

我在做一个tic tac toe游戏。我试图将一个多维数组传递给一个函数。C++传递二维数组作为参数的函数?

这是我的代码:

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 

我不断收到错误。我已经完成了研究,并且已经成功地使用指针传递了一维数组作为参数。

这里是代码:

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

这是将多数组传递给参数的语法。

首先,创建功能时,离开了第一个数字在支架上。即

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

而当调用你的功能做到这一点。

printBoard(board); 

对不起,如果它回答你自己的问题很奇怪,但它帮助了我很多。 礼貌http://www.geeksforgeeks.org/pass-2d-array-parameter-c/

0

我会强烈建议使用指针样式的传球。对于一个二维数组,它看起来像:

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"; 
    } 
}