所以我真的不确定如何提问这个问题,所以我很难看出来。我把这个标题做得最好,我可以适应这个问题。所以,让我们进入它。
我正在制作一个项目来运行前后游戏,我需要能够将一个数组传递给一个函数。所以现在我有类似的东西:
//global
const int sizeFive = 5;
//functions
void function(string m[][sizeFive]){}
int main(){
string GAME_BOARD[sizeFive][sizeFive];
//populate GAME_BOARD here
function(GAME_BOARD);
}
现在这适用于5x5主板上的游戏板。但是,该项目的要求之一是它还需要使用7x7,9x9和11x11电路板尺寸。 我还有以下全局变量。
int SIZE; //size that is not const and assigned in main from user input
const int sizeSeven = 7; //size I want to use for 7x7 board
const int sizeNine = 9; //size I want to use for 9x9 board
const int sizeEleven = 11; //size I want to use for 11x11 board
在用户输入他们想要的电路板尺寸后,是否可以通过使用SIZE来改变我的函数调用?如果是这样,这怎么可能?现在我最好的想法是制作4个不同的文件,每个尺寸1个,然后在用户输入驱动文件中的大小后调用它们。然而,这似乎是无效的,似乎它将占用比实际需要更多的空间(非最佳)。
提前感谢您提供的任何帮助!
答案 0 :(得分:0)
你所拥有的方法是有缺陷的并且无处可去。原因很简单,数组的大小是其类型的一部分,它们也是函数签名的一部分。这是在编译时设置的,并从那里开始不变。没有用户提供的输入可以改变这一点。
现在,你怎么解决这个问题?首先要做的是创建一个包含该字段的对象。此对象提供对字段(如数组)的访问,并提供大小(以摆脱讨厌的全局)。不同之处在于它可以初始化为不同的大小。
您的function()
不会从0
循环到sizeFive
,而是从0
循环到field.size()
,只是举个例子。它不是以field[x][y]
的形式访问原始数组,而是请求field.get(x, y)
等字段。