【问题标题】:initializing 2d array of a struct初始化结构的二维数组
【发布时间】:2013-03-06 23:25:21
【问题描述】:

通常结构的成员变量的初始化将在其构造函数中进行

struct line
{
  line()
  {
     length=0;
     name[0] = '\0';
  }
  int length;
  char name[10];
};

但是如何将二维数组初始化为 0 或空值?

struct myValues
{
  myValues()
  {
    my2dDimension[0][0] = { 0 }; //shows error:expected an expression
  }
  int my2dDimension[20][2];
}

如果我不初始化它们,它们将包含我不想要的垃圾值。

【问题讨论】:

  • 错误告诉你,你已经将my2dDimension定义为int,而不是二维数组。
  • 您将 my2dDimension 声明为 int 而不是二维数组。
  • 抱歉我忘了提my2dDimension[20][2];
  • 首选 std::vector > 除非您有充分的理由使用原始数组。它会自行初始化。

标签: c++ multidimensional-array constructor struct


【解决方案1】:

我会使用 memset

struct myValues
{
  myValues()
  {
    memset(my2dDimension, 0, sizeof my2dDimension);
  }
  int my2dDimension[20][2];
}

memset 用给定的值(在本例中为零)填充一块内存到给定的字节大小。

【讨论】:

  • 可以是任意字节值。 NULL 通常用于指针,所以我不建议将它用于 memset。
  • @David 问题是,如果 my2dDimension 包含图形的点,那么您不希望它们为 0,图形的最后一个点将始终为 [0,0],但是如果我做NULL 那么我猜我不会遇到这个问题,如果我错了,对不起
【解决方案2】:

如何将二维数组初始化为 0 或空值?

下面是普通结构的初始化为 0:

struct SomeStruct{};
SomeStruct someStruct;
::memset ( &someStruct, 0, sizeof(SomeStruct) );

有关更高级的初始化类型,您可以查看 C++11 initializer lists 和 Boost.Assign

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 2021-02-03
    • 2012-11-29
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多