c++ - 如何在 C++ 中静态初始化二维数组的数组

标签 c++ arrays 2d

假设我在 main 之外静态声明了这些。

const int R = 5;
const int C = 3;

char zero[R][C] = {' ', '-', ' ',
                   '|', ' ', '|',
                   ' ', ' ', ' ',
                   '|', ' ', '|',
                   ' ', '-', ' '};    

char one[R][C] = {' ', ' ', ' ',
                  ' ', ' ', '|',
                  ' ', ' ', ' ',
                  ' ', ' ', '|',
                  ' ', ' ', ' '};

char two[R][C] = {' ', '-', ' ',
                  ' ', ' ', '|',
                  ' ', '-', ' ',
                  '|', ' ', ' ',
                  ' ', '-', ' '};

我想做这样的事情:

char ho[3][R][C] = {zero, one, two}

所以我可以做 ho[0], ho[1], ho[2] 来得到相应的二维数组。并执行 ho[0][1][2] 以获取数组中的条目。 (我不想做 ho[0][1*2])

我真的很困惑 'ho' 的数据类型应该是什么。

我用谷歌搜索并尝试过

char (*ho[3])[R][C] = {(char(*)[R][C])zero, (char(*)[R][C])one, (char(*)[R][C])two};

但这似乎并没有达到我想要的效果。

最佳答案

我可以想到几个选择。

使用 typedef 指向二维数组的指针。然后使用 typedef 的数组。

typedef char (*ptr)[C];
ptr ho[3] = {zero, one, two};

您可以在一个庞大的语句中初始化整个 3D 数组。

const int R = 5;
const int C = 3;

char ho[3][R][C] =
   {
      {' ', '-', ' ',
       '|', ' ', '|',
       ' ', ' ', ' ',
       '|', ' ', '|',
       ' ', '-', ' '},  

       {' ', ' ', ' ',
        ' ', ' ', '|',
        ' ', ' ', ' ',
        ' ', ' ', '|',
        ' ', ' ', ' '},

        {' ', '-', ' ',
        ' ', ' ', '|',
        ' ', '-', ' ',
        '|', ' ', ' ',
        ' ', '-', ' '}
  };

关于c++ - 如何在 C++ 中静态初始化二维数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479276/

相关文章:

php - 如何避免 'undefined index' 错误?

php - 从共享内存中检索时,PHP 是否复制变量?

c++ - 在 C++ 中可以使用构造函数将 2D Vector 初始化为单行吗?

unity-game-engine - Physics2D.Raycast 适用于某些对象,但不适用于其他对象

c++ - 使用带 boost::shared_ptr 的基类在 map 中查找

c++ - 默认情况下应调用 move 构造函数

c++ - 使用 g++ 编译器 (Ubuntu) 将 Allegro 库链接到 C++ 应用程序

Javascript:如何将包含对象的对象转换并映射到数组中?

c++ - 2D Box Collision - 这是对的吗?

c++ - omp_init_lock(omp_lock_t*) - 这个函数究竟做了什么?