【问题标题】:Unable to Initialize 2D Array无法初始化二维数组
【发布时间】:2015-10-06 08:19:56
【问题描述】:

我已经像这样声明了一个二维全局数组变量:

int grid_2d_array[ROWS][COLUMNS];

然后在main 中,我必须使用硬编码值对其进行初始化:

grid_2d_array[ROWS][COLUMNS] = {{5, 7, 2, 8, 3, 6, 1, 4},
                                ....
                                {1, 6, 3, 2, 4, 8, 9, 5}
                                };

例子:

#include <stdio.h>

#define ROWS    9
#define COLUMNS 9

/* Global variable. */
int grid_2d_array[ROWS][COLUMNS];

int main() 
{
   /* Initialze the 2D array. */
   grid_2d_array[ROWS][COLUMNS] = {{5, 7, 2, 8, 3, 6, 1, 4},
                                   ....
                                   {1, 6, 3, 2, 4, 8, 9, 5}
                                  };

   return 0;
}

但是当我尝试编译源代码时,GCC 给出了以下错误:

source_file.c: In function ‘main’:
source_file.c:45:34: error: expected expression before ‘{’ token
 grid_2d_array[ROWS][COLUMNS] = {{5, 7, 2, 8, 3, 6, 1, 4},
                                ^

我不确定为什么 GCC 不将 grid_2d_array 识别为全局变量。

如果我在main 中重新声明上述变量,问题就会消失。

我正在运行 GCC 版本:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)

【问题讨论】:

  • 请提供一个适当的最小示例,其他人可以尝试编译。现在还不清楚定义在哪里以及是否有其他因素影响问题。
  • 您需要为您的数组及其嵌套数组分配内存。
  • grid_2d_array[ROWS][COLUMNS] = 指定数组的一个元素(不存在)。尝试删除 [ROWS][COLUMNS]use grid_2d_array = { /*your stuff goes here*/};
  • 您有什么理由不使用std::array&lt;std::array&lt;int&gt;&gt; 吗?
  • @tobi303 好问题。这是 C 还是 C++(不能两者兼有)?

标签: c arrays gcc


【解决方案1】:

C 和 C++ 数组只能作为定义语句的一部分进行初始化:

int grid_2d_array[ROWS][COLUMNS] = {{5, 7, 2, 8, 3, 6, 1, 4},
                                    ....
                                    {1, 6, 3, 2, 4, 8, 9, 5}
                                   };

不支持将多个值分配到数组中。

【讨论】:

    【解决方案2】:

    除了 FireAphis 的回答,如果您在 C99 下,您可以使用 compound literals 在他的定义之外初始化指向 ints 数组(不是二维数组)的指针:

    int (*grid_2d_array)[COLUMNS]; /* Pointer to array of n int's */
    

    主要:

    grid_2d_array = (int [ROWS][COLUMNS]){
        {5, 7, 2, 8, 3, 6, 1, 4},
        {1, 6, 3, 2, 4, 8, 9, 5}
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-29
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      相关资源
      最近更新 更多