【问题标题】:how to initialize an empty integer array in c++如何在 C++ 中初始化一个空整数数组
【发布时间】:2014-12-31 20:11:25
【问题描述】:

如何将 NULL 或空值放入整数数组?

struct book{
char name;
char aut;
int det[10];
};
book bk[40];

这里我希望每本书的数据类型都有每个 det[] 成员的 det 数组的值为零。

【问题讨论】:

  • 什么是“整数字符串”?
  • 你的意思是一个int数组吗?
  • 是的,我的意思是 int 数组。对不起,我的基础有点薄。

标签: c++ arrays initialization


【解决方案1】:

我认为您的意思是如何对整数数组进行零初始化。:)

你可以像这样定义数组

int det[10] = {};

int det[10] = { 0 };

您可以在结构中使用这样的声明。

如果数组已经定义,那么你可以使用 memset。例如

#include <cstring>

//...

std::memset( det, 0, sizeof( det ) );

【讨论】:

    【解决方案2】:

    你没有。

    您的数组det 由10 个元素组成,每个元素都是int 类型的对象。数组的长度在创建后无法更改,并且每个元素都有一些 int 值(如果尚未初始化,则包含未定义的垃圾)。

    对于指针类型,有一个特殊的“空指针”值,它不指向任何东西,并且不同于作为某物地址的所有指针值。

    int 类型没有对应的“null”或“empty”值。 0 是一个完全有效的 int 值。

    如果您想跟踪哪些元素有效以及哪些无效,则必须使用其他方法。例如,您可能会随意选择一些值来表示无效条目。如果您愿意,您可以为此目的使用0,但是您将无法使用0 作为有效条目。或者可以使用INT_MIN,最负的int 值,与有意义的值发生冲突的可能性较小。但是,您必须编写代码,使其始终关注您选择的特殊值。

    或者您可以使用不同的数据结构,例如std::vector &lt;int&gt;,它可以让您更改长度。您应该使用哪种数据结构取决于您要完成的工作,这在您的问题中并不清楚。

    【讨论】:

      【解决方案3】:

      对于 int 数组,您必须将其初始化为 0,而不是 null。

      int det[10] = { 0 };
      

      对于字符串数组,您将元素初始化为 null,但对于 int 则不然。

      【讨论】:

      • 我们是否必须在声明时进行初始化,只是因为我在结构中声明了数组。
      【解决方案4】:

      C++11 改变了在构造对象期间初始化数组的语义。通过将它们包含在 ctor 初始化器列表中并用空括号或括号初始化它们,数组中的元素将被默认初始化。

      struct foo
      {
          int x[100];
      
          foo() : x{} {}
      };
      

      在这种情况下,foo:x 中的每个元素都将被初始化为零。

      如果您不使用 C++11,则可以使用 std::memset 初始化构造函数主体中的数组元素。

      struct foo
      {
          int x[100];
      
          foo()
          {
              std::memset(x, 0, sizeof(x));
          }
      };
      

      【讨论】:

        猜你喜欢
        • 2012-02-02
        • 1970-01-01
        • 2018-02-26
        • 2012-11-08
        • 2014-10-24
        • 1970-01-01
        • 2012-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多