如何在c ++中初始化一个空整数数组

时间:2014-12-31 20:11:26

标签: c++

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

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

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

4 个答案:

答案 0 :(得分:3)

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

您可以像

一样定义数组
int det[10] = {};

int det[10] = { 0 };

您可以在结构中使用此类声明。

如果已定义数组,则可以使用memset。例如

#include <cstring>

//...

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

答案 1 :(得分:3)

你没有。

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

对于指针类型,有一个特殊的&#34;空指针&#34;这个值并不指向任何东西,并且不同于作为某事物地址的所有指针值。

没有相应的&#34; null&#34;或&#34;空&#34;类型int的值。 0是完全有效的int值。

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

或者您可以使用其他数据结构(例如std::vector <int>)来更改长度。您应该使用哪种数据结构取决于您尝试完成的任务,这一点在您的问题中并不明确。

答案 2 :(得分:1)

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));
    }
};

答案 3 :(得分:0)

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

int det[10] = { 0 };

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