6

我对编程比较陌生,我需要输入一个 4 维数组,我几乎无法绕开它。所以,让我们从一个简单的 3-d 数组开始,每个元素有 2 个,如下所示:

int arr[2][2][2] = 
{
    {
        {1, 2}
        {3, 4}    //redline on "{"
    }
    {             //redline on "{"
        {5, 6}
        {7, 8}
    }
};

VS-2012 在“3”之前将“{”红线,并表示它期待一个“}”。我怎样才能以整洁的格式输入数组?有4个维度会让它更复杂,我需要能够清楚地看到数据。

另外,我的数组中将有很多零,本质上每个 arr[n][n] 都将为 0,所以我想知道是否可以使初始化更简单一些。

我的数组将是类型

int arr[7][7][15][2]

还是我最好使用 struct 代替?

提前致谢!

4

5 回答 5

6

你缺少一个,.

对于一个三维数组

 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}
                         }
                      }
                    };
于 2013-11-08T16:09:49.070 回答
4

int例如,每个括号中的元素都可以被视为其中的一个{ 1, 2 }。使用列表进行初始化表示使用逗号枚举单独的元素。因此,正确的语法将在每个带括号的数组 ( { { 1, 2 }, { 3, 4 } }) 之后使用逗号:

int arr[2][2][2] = 
{
    {
        {1, 2},
        {3, 4}
    },
    {            
        {5, 6},
        {7, 8}
    }
};

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

于 2013-11-08T16:11:16.180 回答
0

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

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

  1. 内大括号表示矩阵行。

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

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

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

  5. 最后一个内大括号后的尾随逗号是可选的。

  6. 最后一个大括号后的尾随分号是必需的。

(标准 C 1999 的专家可以编辑上述列表以更正任何错误陈述吗?)

于 2014-01-12T19:24:30.360 回答
0

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

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

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};

于 2016-03-20T17:40:06.727 回答
-1

四维数组的表示

int arr[2][2][2][2] = 
{
    { { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } }, 
    { { {9,10}, {11, 12} }, { {13, 14}, {15, 16} } }
};
于 2017-03-22T09:03:54.973 回答