给出预定义的二维字符数组值

Give a pre-defined 2-D char array values

本文关键字:二维 字符 数组 预定义      更新时间:2023-10-16

char数组是在如下结构中定义的:

struct munchkin_grid_type
{
     char grid[5][5];
};

在另一个函数中,一个变量被定义为这种新类型,我希望其中的char数组被填充:

munchkin_grid_type munchkin_grid;
munchkin_grid.grid[5][5] = 
{
        { 'a', 'b', 'c', 'd', 'e' },
        { ' ', ' ', ' ', ' ', ' ' },
        { ' ', ' ', ' ', ' ', ' ' },
        { ' ', ' ', ' ', ' ', ' ' },
        { '1', '2', '3', '4', '5' }
};

我得到的错误是:

  • 错误C2440:"=":无法从"初始值设定项列表"转换为"char"

  • IntelliSense:初始值设定项值太多

如何在不使用std::array/vvector类型的情况下将这些值放入这个二维数组中?我只想要一个普通的2D字符数组。

而不是

munchkin_grid_type munchkin_grid;
munchkin_grid.grid[5][5] = 
{
    { 'a', 'b', 'c', 'd', 'e' },
    { ' ', ' ', ' ', ' ', ' ' },
    { ' ', ' ', ' ', ' ', ' ' },
    { ' ', ' ', ' ', ' ', ' ' },
    { '1', '2', '3', '4', '5' }
};

进行

munchkin_grid_type munchkin_grid = 
{
    {
       { 'a', 'b', 'c', 'd', 'e' },
       { ' ', ' ', ' ', ' ', ' ' },
       { ' ', ' ', ' ', ' ', ' ' },
       { ' ', ' ', ' ', ' ', ' ' },
       { '1', '2', '3', '4', '5' }
    }
};

编辑-根据要求解释其依据。

本质上,这是一个带有初始化程序的单个struct named machkin_grid的定义。要理解它,请从背带中锻炼。

一个单独的字符数组将被初始化,类似于

char x[5] = {'a', 'b', 'c', 'd', 'e'};

char的二维数组引入了{}的另一个嵌套。

char x[2][5] = {
    {'a', 'b', 'c', 'd', 'e'},
    {'1', '2', '3', '4', '5'}
  };

我已经更改了示例中的第一个维度,因为对于5x5,不太清楚维度的初始化方式。例如,如果交换了尺寸,初始化程序也需要更改;

char y[5][2] = {
     {'a', 'b'},
     {'c', 'd'},
     {'e', '1'},
     {'2', '3'},
     {'4', '5'}
  };

然后,结构的初始化添加了另一个级别的{},以获得如上所述的munchkin_grid的初始化器。

代码munchkin_grid.grid[5][5] =正在访问数组的一个元素(您可能会将语法与另一种语言混淆…)删除[5][5]应该可以解决您的问题。

编辑:以下代码应该可以工作(至少它没有产生任何IntelliSense错误。)

#include <array>
struct munchkin_grid_type
{
    std::array<char, 5> grid[5];
};
munchkin_grid_type munchkin_grid;
munchkin_grid.grid[0] = {'a', 'b', 'c', 'd', 'e' };
munchkin_grid.grid[1] = { ' ', ' ', ' ', ' ', ' ' };
munchkin_grid.grid[2] = { ' ', ' ', ' ', ' ', ' ' };
munchkin_grid.grid[3] = { ' ', ' ', ' ', ' ', ' ' };
munchkin_grid.grid[4] = { '1', '2', '3', '4', '5' };