我对编程比较陌生,我需要输入一个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的情况下,所以我想知道我是否可以使初始化更简单。< / p>
我的数组将是
类型int arr[7][7][15][2]
或者我最好不要使用struct?
提前致谢!
答案 0 :(得分:5)
您错过了,
。
对于三维数组
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 :(得分:4)
例如,每个括号内的元素可以被视为int
内的{ 1, 2 }
之一。使用列表初始化表明使用逗号枚举单独的元素。因此,在每个括号内的数组({ { 1, 2 }, { 3, 4 } }
)之后,正确的语法将使用逗号:
int arr[2][2][2] =
{
{
{1, 2},
{3, 4}
},
{
{5, 6},
{7, 8}
}
};
对于四维数组,您必须编写大量“硬编码”代码;你可能最好写一个函数,用你的值填充它。
答案 2 :(得分:0)
在外括号内,内括号{ }
表示矩阵行。但是需要哪些逗号?哪些逗号是可选的?
在C 1999中的二维数组声明初始化:
内括号表示矩阵行。
每两个相邻的矩阵元素初始化值之间必须出现一个逗号(即使用换行符分隔)。
逗号应出现在相邻的内括号之间;但是,这个逗号在某些标准编译器(?)中可能是可选的。
每行中最后一个元素后面的尾随逗号是可选的(如果使用内括号)。
最后一个内部大括号后面的尾随逗号是可选的。
需要在最后一个外部大括号后面加一个尾随分号。
(标准C 1999的专家可以编辑上面的列表以纠正任何虚假陈述吗?)
答案 3 :(得分:0)
请记住C
始终使用行主要顺序进行静态声明数组的内存分配。
例如:
int A[3][2]
,内存分配从第一个元素开始,即A[0][0]
然后A[0][1]
之后跳转到下一行,但内存分配将是连续的,因此内存布局顺序的下一个元素是A[1][0]
然后是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};
答案 4 :(得分:-1)
四维数组的表示
int arr[2][2][2][2] =
{
{ { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } },
{ { {9,10}, {11, 12} }, { {13, 14}, {15, 16} } }
};