首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中初始化大型二维数组

在C++中初始化大型二维数组
EN

Stack Overflow用户
提问于 2010-08-11 23:32:45
回答 8查看 95.7K关注 0票数 21

我希望在一个类中有静态常量二维数组。数组相对较大,但我只想初始化几个元素,其他元素可能是编译器初始化它们的值。

例如,如果一个类的定义如下:

class A {
public:
  static int const test[10][10];
};

int const A::test[10][10] = {
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};

我只对初始化标记为'7‘的元素感兴趣,如何在相同的元素上执行此操作,但使用更大尺寸的数组,如array1024

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-08-11 23:58:11

被初始化的数组的任何部分,即超出初始化的部分,都被初始化为0。因此:

int const A::test[10][10];           // uninitialized

int const A::test[10][10] = { {0} }; // all elements initialized to 0.

int const A::test[10][10] = {1,2};   // test[0][0] ==1, test[0][1]==2, rest==0

这意味着你所需要初始化的就是最后一个非零值:

int const A::test[10][10] = { 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},  
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0}, 
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0}, 
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0}, 
  {0, 0, 0, 7, 7, 7, 7, 0, 0, 0}
};

这不是最好的解决方案,但会节省一些工作。

票数 35
EN

Stack Overflow用户

发布于 2010-08-12 00:03:59

初始化后,无法将int赋值给const数组。因此,您必须编写脚本:

并以这种方式包含您的文件:

class A {
public:
    static const int test[10][10];
};

const int A::test[10][10] = {
#include "data.inc" // points to the file generated by script.
};
票数 8
EN

Stack Overflow用户

发布于 2010-08-12 08:30:15

巧合的是,在读完你的问题几个小时后,我在"C - A Reference Manual" 5th ed., Harbison/Steele一书中找到了一个可能的解决方案(顺便说一句,这是一个很棒的C参考)。

根据这本书,

C99允许您命名要在初始化器列表中初始化的聚合组件(结构、联合或数组)。

..。它给出了一个例子:

int a1[5] = { [2]=100, [1]=3 }; /* eqv. to {0, 3, 100, 0, 0} */

因此,根据编译器的遵从性和数组中非零元素的大小,您可以使用此语法有效地初始化矩阵。也就是说,这本书没有给出一个二维数组的例子。不幸的是,我不能测试这个想法,因为MSVC++ 2005似乎不支持C99。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3460074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档