我不能在不使用指针的情况下返回 2d 数组!我正在制作一个井字游戏类型游戏,这是我的向上移动功能


char[][]  moveup()
{
for (int i=0;i<3;i++)
 {
for (int j=0;j<3;j++)
  {
   if(board[i][j]=='X' && board [i-1][j]=='!' ) {
    board [i][j]='!';
    board [i-1][j]='X';
    }
   }
   }
    return board;
  }

这是我的代码,我想将这个 2d 数组传递给一个向量,所以我想在不使用指针的情况下返回一个 2d 数组板

您可以返回对数组的引用:

char(&moveup())[3][3]
{
    for (int i=0; i<3; i++) {
        for (int j=0; j<3; j++) {
            if (board[i][j]=='X' && board[i-1][j]=='!') {
                board[i][j]='!';
                board[i-1][j]='X';
            }
        }
    }
    return board;
}

这是一个通过引用传递数组的完整程序。请注意我们现在如何使用基于范围的 for 循环来迭代元素,因为引用尚未衰减到指针,并且尺寸和类型已保留:

#include <iostream>
#include <vector>
class Board {
public:
    char(&moveup())[3][3]
    {
        for (int i=0; i<3; i++) {
            for (int j=0; j<3; j++) {
                if (board[i][j]=='X' && board[i-1][j]=='!') {
                    board[i][j]='!';
                    board[i-1][j]='X';
                }
            }
        }
        return board;
    }
    char board[3][3];
};

int main()
{
    Board board{
        '.','!','x',
        'o','X','x',
        '.','o','x'
    };
    auto& sameboard = board.moveup();
    for (auto& row : sameboard) {
        for (auto& element : row) {
            std::cout << element;
        }
        std::cout << 'n';
    }
    return 0;
}

传入向量并在此函数中填充它。

最新更新