C++ 访问函数c+中的全局变量+;
我有一个非常基本的疑问。从下面的代码中,我将Board[]]声明为一个全局字符数组。我想在名为C++ 访问函数c+中的全局变量+;,c++,arrays,function,multidimensional-array,C++,Arrays,Function,Multidimensional Array,我有一个非常基本的疑问。从下面的代码中,我将Board[]]声明为一个全局字符数组。我想在名为init\u board()的函数中初始化数组。但是编译器返回 函数void init_board()中的: 应在“{”标记之前使用主表达式 应为“{”标记之前的“ 代码: #包括 #包括 使用名称空间std; //全局变量--------------- 炭板[2][2]; //函数声明---------- void init_board(); 内部主(空) { 初始化电路板(); 对于(int i=0
init\u board()
的函数中初始化数组。但是编译器返回
函数void init_board()中的:
应在“{”标记之前使用主表达式
应为“{”标记之前的“
代码:
#包括
#包括
使用名称空间std;
//全局变量---------------
炭板[2][2];
//函数声明----------
void init_board();
内部主(空)
{
初始化电路板();
对于(int i=0;i,只能在声明数组时使用初始值设定项语法,即
char board[2][2] = {{'a', 'b'}, {'c', 'd'}};
在所有其他情况下,您需要浏览数组元素并对其进行设置。您正在索引init_Board()中的Board[2][2]您正在索引超出指定大小的数组,即您已指定数组为2行2列,但您正在索引到元素3中(在C/C++和其他一些语言中,索引从0开始)。
您可以在编译时在声明数组的文件顶部初始化该数组:
char Board[2][2] = {{'a','b'},{'c','d'}};
或者,您可以按照其他人的建议单独初始化每个元素
void init_board()
{
Board = {{'a','b'},{'c','d'}};
}
那会解决的。。。
当你使用
Board[2][2]您只引用了[2][2]位置的一个字符。因此,这意味着您将只向Board的一个部分添加a、b、c和d这与全局变量无关。它与初始值设定项有关。Board[2][2]
超出范围。由于Board
有两行两列,只有0
和1
是合法的行/列值。@DavidSchwartz我看不到我在射程之外的位置…我在Board[2][2]中有两个元素在两行中={'a','b'},{'c','d'};
正确,因此有效条目是Board[0][0]
,板[0][1]
,板[1][[0]
,和板[1][1]
——这就是四,二乘二。您的代码试图给板[2][2]
赋值(因为这是=
左侧的内容),但没有板[2][2]
。(即使有,也应该是一个字符,而不是数组。棋盘就是数组。)我想你是在想象,等号右边有一个数组的事实会让左边的东西变成一个数组。但这不是=
的工作原理。棋盘[0][0]='a';
就可以了。板[0][0]
是数组中的一个字符条目,'a'
是它可以接受的值之一。
void init_board()
{
Board = {{'a','b'},{'c','d'}};
}