Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何初始化三维数组_C_Arrays_Multidimensional Array - Fatal编程技术网

C 如何初始化三维数组

C 如何初始化三维数组,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我试图初始化一个3-d数组,但由于某种原因,当我编译时,它给了我很多警告 double array[5][4][1]= { { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}, {17,18,19,20} } }; 警告: sales.c: In function `main': sales.c:28: warning: excess elements in array initializer

我试图初始化一个3-d数组,但由于某种原因,当我编译时,它给了我很多警告

double array[5][4][1]=
{
  {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16},
    {17,18,19,20}
  }
};
警告:

sales.c: In function `main':
sales.c:28: warning: excess elements in array initializer
sales.c:28: warning: (near initialization for `array[0][0]')
sales.c:28: warning: excess elements in array initializer
sales.c:28: warning: (near initialization for `array[0][0]')
sales.c:28: warning: excess elements in array initializer
sales.c:28: warning: (near initialization for `array[0][0]')
sales.c:29: warning: excess elements in array initializer
sales.c:29: warning: (near initialization for `array[0][1]')
sales.c:29: warning: excess elements in array initializer
sales.c:29: warning: (near initialization for `array[0][1]')
sales.c:29: warning: excess elements in array initializer
sales.c:29: warning: (near initialization for `array[0][1]')
sales.c:30: warning: excess elements in array initializer
sales.c:30: warning: (near initialization for `array[0][2]')
sales.c:30: warning: excess elements in array initializer
sales.c:30: warning: (near initialization for `array[0][2]')
sales.c:30: warning: excess elements in array initializer
sales.c:30: warning: (near initialization for `array[0][2]')
sales.c:31: warning: excess elements in array initializer
sales.c:31: warning: (near initialization for `array[0][3]')
sales.c:31: warning: excess elements in array initializer
sales.c:31: warning: (near initialization for `array[0][3]')
sales.c:31: warning: excess elements in array initializer
sales.c:31: warning: (near initialization for `array[0][3]')
sales.c:32: warning: excess elements in array initializer
sales.c:32: warning: (near initialization for `array[0][4]')
sales.c:32: warning: excess elements in array initializer
sales.c:32: warning: (near initialization for `array[0][4]')
sales.c:32: warning: excess elements in array initializer
sales.c:32: warning: (near initialization for `array[0][4]')
sales.c:32: warning: excess elements in array initializer
sales.c:32: warning: (near initialization for `array[0]')

当我通过丢失一对大括号来初始化一个二维数组时,编译器不会给出这些警告。有人能指出我做错了什么吗?

它在抱怨,因为你说你最里面的数组应该只有一个元素,而你却给了它很多元素

int a[3][2][1] =                                                        
{                                                                       
    {                                                                   
        {1},                                                            
        {2}                                                             
    },                                                                  
    {                                                                   
        {3},                                                            
        {4}                                                             
    },                                                                  
    {                                                                   
        {5},                                                            
        {6}                                                             
    }                                                                   
}; 

如果您想要更多的内部元素,请将您的
1
更改为其他元素。

维度1最为独特;您还有一个或多个大括号级别:

double array[5][4][1]=
{
  // {  These braces mean what follows is meant to initialize array[0], but
  //    there are 5 initializers for the 4 elements in array[0], and there
  //    are 4 initializers for each of the 'size 1' sub-arrays which is why
  //    the compiler complains about too many initializers for array[0][0][0], etc.
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16},
    {17,18,19,20}
  // }
};
这至少可以编译。完全大括号版本将在每个数字周围包含一对大括号:

double array[5][4][1]=
{
    { {  1 }, {  2 }, {  3 }, {  4 }, },
    { {  5 }, {  6 }, {  7 }, {  8 }, },
    { {  9 }, { 10 }, { 11 }, { 12 }, },
    { { 13 }, { 14 }, { 15 }, { 16 }, },
    { { 17 }, { 18 }, { 19 }, { 20 }, },
};

这是5行,每行上有4个子数组,每个子数组包含一个数字。

您的维度显然是无序的;从最外层到最内层,您有1、5、4个初始值设定项,它们与[5][4][1]或[1][4][5]都不匹配。我认为,OP更可能希望将其声明为
array[1][5][4]
,并使用当前的初始值设定项。@JimBalter:除了降低访问速度之外,为什么还要向任何数组添加大小为1的维度?如果它是一个具有三个动态维度的数组,那么1可能会显示为退化情况(我不抱怨),但是对于静态大小的数组,总是必须为数组定义中对应于
[1]
的索引编写
[0]
有什么意义?也就是说,我注释掉的带大括号的初始值设定项将正确初始化
int-array[1][5][4]
。但是我认为
[1]
只是一个错误。OP可能有一个算法可以在3D阵列上工作,但他的测试数据在其中一个维度上只有一个实例。对于尺寸恒定的阵列,访问速度不会减慢。“将正确初始化int数组[1][5][4]——我没有说其他。“但我认为[1]只是一个错误”——也许,但OP明确地写了关于初始化三维数组的内容。