【问题标题】:Declaring an array outside and initializing using an initialize list在外部声明一个数组并使用初始化列表进行初始化
【发布时间】:2018-03-19 06:47:23
【问题描述】:

我在初始化 2D int 数组时遇到问题。 我的程序结构是:

int arr[2][2];
if(val==1)
 arr = {{1,1}, {2,2}};
else if (val==2)
 arr = {{3,3}, {4,4}};
...
...

int x = arr[1][1];
...

我收到一个错误“表达式必须是可修改的左值”

谢谢。

【问题讨论】:

  • 2D的相关性是什么?
  • @ArchLinuxTux 你认为这里接受的答案是你问题答案的副本吗?我看不出它们是如何重复的。使用 array 的公认答案是解决这个问题的正确方法,它不是答案的一部分。
  • @madu 这不是重复的,因为另一个答案在 C 中,而 C 中的解决方案不适用于 C++。
  • 如果有人需要在 C 语言中执行此操作,here is how 使用这个:char (*daytab)[3] = (char [][3]){{1, 31, 4}, {2, 31, 4}}; 用于多维数组。

标签: c++ multidimensional-array


【解决方案1】:

在您的代码中,arr = {{1,1}, {2,2}};不是初始化。如果硬要原生数组,恐怕每个元素都要手动设置。

但是你可以切换到使用std::array,它会提供你想要的:

array<array<int, 2>, 2> arr;
if (val == 1)
    arr = { { { 1,1 }, { 2,2 } } };
else if (val == 2)
    arr = { { { 3,3 }, { 4,4 } } };

int x = arr[1][1];

注意额外的大括号(请参阅here)。

【讨论】:

  • 不再需要使用 c++14 大括号了。
【解决方案2】:

初始化

int arr[2][2] = {{3,3}, {4,4}};

修改

arr[0][0] = 3;
arr[0][1] = 3;
arr[1][0] = 4;
arr[1][1] = 4;

【讨论】:

  • 谢谢。这是不可能的,因为 arr 实际上是一个 [10][11] 数组。
  • 这是 int 类型的方式,您仍然可以循环并使事情变得更容易,或者因为您提到了 C++,所以使用它提供的库会更舒服。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多