如何在c ++中静态初始化2d数组的数组

时间:2014-10-21 05:09:32

标签: c++ arrays 2d

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

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]得到相应的2d数组。并执行[0] [1] [2]以获取数组中的条目。 (我不想做[0] [1 * 2])

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

我用Google搜索并尝试

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

但这似乎没有达到我的目的。

1 个答案:

答案 0 :(得分:1)

我可以想到几个选择。

将typedef用于指向2D数组的指针。然后使用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] =
   {
      {' ', '-', ' ',
       '|', ' ', '|',
       ' ', ' ', ' ',
       '|', ' ', '|',
       ' ', '-', ' '},  

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

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