如何在C语言中声明和初始化四维数组

如何在C语言中声明和初始化四维数组,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我对编程还比较陌生,我需要进入一个四维数组,我几乎无法将我的头围绕它。那么,让我们从一个简单的3-d数组开始,每个数组有两个元素: int arr[2][2][2] = { { {1, 2} {3, 4} //redline on "{" } { //redline on "{" {5, 6} {7, 8} } }; VS-2012在“3”之前将“{”改为“}”。如何

我对编程还比较陌生,我需要进入一个四维数组,我几乎无法将我的头围绕它。那么,让我们从一个简单的3-d数组开始,每个数组有两个元素:

int arr[2][2][2] = 
{
    {
        {1, 2}
        {3, 4}    //redline on "{"
    }
    {             //redline on "{"
        {5, 6}
        {7, 8}
    }
};
VS-2012在“3”之前将“{”改为“}”。如何才能以整洁的格式输入数组?有4个维度会使它更复杂,我需要能够清楚地看到数据

另外,我的数组中有大量的零,在essense中,每个arr[n][n]都是0,所以我想知道是否可以简化初始化

我的数组将是

int arr[7][7][15][2]
还是改用struct更好


提前谢谢

您缺少一个

对于三维阵列

 int arr[2][3][4] = { 
                       { 
                          {1, 2, 1, 2}, {1, 2, 1, 4}, {1, 2, 4, 4} 
                       },
                       {  
                          {1, 1, 2, 4}, {1, 2, 1, 4}, {1, 2, 1, 4} 
                       } 
                    };

or int arr[2][3][4] = {1,2,1,2,1,2,1,4,1,2,4,4,1,1,2,4,1,2,1,4,1,2,1,4}; 
int arr[2][3][4][2] = {
                        {
                          {
                            {1,2},{1,2},{1,2},{4,2}
                          },
                          {
                            {2, 4},{1, 4},{1, 4},{1,2}
                          },
                          {
                            {2, 4},{1, 4},{1, 4},{1,8}
                          }
                       },
                       {
                         {
                           {1,2},{1,2},{1,2},{4,2}
                         },
                         {
                           {2, 4},{1, 4},{1, 4},{1,2}
                         },
                         {
                           {2, 4},{1, 4},{1, 4},{1,2}
                         }
                      }
                    };
对于四维数组

 int arr[2][3][4] = { 
                       { 
                          {1, 2, 1, 2}, {1, 2, 1, 4}, {1, 2, 4, 4} 
                       },
                       {  
                          {1, 1, 2, 4}, {1, 2, 1, 4}, {1, 2, 1, 4} 
                       } 
                    };

or int arr[2][3][4] = {1,2,1,2,1,2,1,4,1,2,4,4,1,1,2,4,1,2,1,4,1,2,1,4}; 
int arr[2][3][4][2] = {
                        {
                          {
                            {1,2},{1,2},{1,2},{4,2}
                          },
                          {
                            {2, 4},{1, 4},{1, 4},{1,2}
                          },
                          {
                            {2, 4},{1, 4},{1, 4},{1,8}
                          }
                       },
                       {
                         {
                           {1,2},{1,2},{1,2},{4,2}
                         },
                         {
                           {2, 4},{1, 4},{1, 4},{1,2}
                         },
                         {
                           {2, 4},{1, 4},{1, 4},{1,2}
                         }
                      }
                    };

例如,每个带括号的元素都可以看作
{1,2}
中的
int
s之一。使用列表初始化指示使用逗号枚举单独的元素。因此,正确的语法是在每个括号内的数组(
{{1,2},{3,4}
)后面加逗号:


对于四维数组,您必须编写大量“硬编码”代码;您最好编写一个函数来为您填充值。

在外部大括号内,内部大括号
{}
表示矩阵行。但需要哪些逗号?哪些逗号是可选的

在C 1999二维数组声明初始化中:

  • 内括号表示矩阵行

  • 两个相邻的矩阵元素初始化值之间必须出现逗号(即使用换行符分隔)

  • 相邻的内括号对之间应出现逗号;但是,在某些标准编译器(?)中,此逗号可能是可选的

  • 每行最后一个元素后的尾随逗号是可选的(如果使用内大括号)

  • 最后一个内括号后的尾随逗号是可选的

  • 最后一个外大括号后面需要一个尾随分号


  • (标准C 1999中的专家能否编辑上述列表以更正任何错误陈述?

    记住
    C
    始终使用行主顺序为静态声明的数组分配内存。 例如:

    • 在二维数组的情况下,假设
      inta[3][2]
      内存分配从第一个元素开始,即
      A[0][0]
      然后
      A[0][1]
      跳到下一行,但内存分配将是连续的,因此内存布局顺序中的下一个元素将是
      A[1][0]
      然后
      A[1][1]>A[2][0]->A[2][1]
    • 因此,在初始化的情况下,更简单的方法是以1-D形式线性地将其可视化,然后将其写下来

    int-arr[2][3][4]={1,2,1,2,1,4,1,2,4,4,1,1,2,4,1,2,1,4,1,1,4}

    四维数组的表示形式

    int arr[2][2][2][2] = 
    {
        { { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } }, 
        { { {9,10}, {11, 12} }, { {13, 14}, {15, 16} } }
    };
    

    您还必须在连续的括号内的“元素”之间添加逗号。int arr[2][2]={{{{1,2}、{3,4}、{{5,6}、{7,8};正如Alexander所说,初始化中“}”后面有逗号。谢谢大家!我确实需要对数组进行硬编码,因为程序将对数组进行一些疯狂的搜索。这不是真正的“一个
    操作符”。这只是一个逗号,是初始值设定项的语法元素。Is与
    运算符无关。