我不能在不使用指针的情况下返回二维数组!在制作井字游戏时,这是我的上移功能
Posted
技术标签:
【中文标题】我不能在不使用指针的情况下返回二维数组!在制作井字游戏时,这是我的上移功能【英文标题】:I cant return a 2d array without using pointers ! im making a tic tac toe type game and this is my move up function 【发布时间】:2016-04-30 15:30:09 【问题描述】: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;
这是我的代码,我想将这个二维数组传递给一个向量所以我想在不使用指针的情况下返回一个二维数组板
【问题讨论】:
不,您不能返回数组。如果您想这样做,请选择另一种语言或使用结构包装数组。 选择 其中一个 C 或 C++ 应该不错。 @MikeCAT IMO,拥有两个标签是完全有效的。数组在 C 和 C++ 中的工作方式几乎完全相同。 请不要吵架。老鼠可能会害怕。 @HolyBlackCat 数组在 C 和 C++ 中的状态不同。在 C++ 中,数组是一种低级构造,一般人不应该接触。因此,对 C 有利的答案对 C++ 来说是错误的和误导性的。答案的形式正确性是必需的,但这不是唯一的要求。 【参考方案1】:您可以返回对数组的引用:
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;
【讨论】:
【参考方案2】:将向量传入并填充到此函数中。
【讨论】:
以上是关于我不能在不使用指针的情况下返回二维数组!在制作井字游戏时,这是我的上移功能的主要内容,如果未能解决你的问题,请参考以下文章