如何在C中的4维数组中声明和初始化

我对编程比较陌生,我需要输入一个4维数组,我几乎无法绕过它。 那么,让我们从一个简单的三维数组开始,每个元素都是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而不是?

提前致谢!

你错过了,

对于三维数组

  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 。 使用列表初始化表明使用逗号枚举单独的元素。 因此,在每个括号内的数组( { { 1, 2 }, { 3, 4 } } )之后,正确的语法将使用逗号:

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

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

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

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

  1. 内括号表示矩阵行。

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

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

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

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

  6. 需要在最后一个外部支撑后的尾随分号。

(标准C 1999的专家可以编辑上面的列表来纠正任何虚假陈述吗?)

记住C总是使用Row主顺序为静态声明的数组进行内存分配。 例如

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

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][2][2][2] = { { { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } }, { { {9,10}, {11, 12} }, { {13, 14}, {15, 16} } } };