如何将NULL或空值放入整数数组?
struct book{
char name;
char aut;
int det[10];
};
book bk[40];
这里我希望每个书籍数据类型都有det数组,每个det []成员都有零值。
答案 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。