因此,据我所知,在 C 中初始化"空"数组时(如下所示),您将每个元素初始化为 0(因为 C 没有空值)。
int values[5] = {0}; // each element has a value of 0
但是,如果我为我的 int 数组分配一些随机值,如下所示......
// examples for assigned values, but they can be from all over the range
values[0] = 1;
values[1] = 0;
values[2] = -1;
如何检查数组中的哪些元素尚未分配值?
即,处理以下内容的最佳方法是什么?
for (int i = 0; i < 5; i++) {
// find out whether this element was already assigned a specific value
if (array[i] == ??? )
{
// the element has yet to be assigned
}
}
这是一种针对更困难情况的方法,即显式分配给数组元素的可能值涵盖了所用数据类型的所有范围(否则请参阅其他答案,即将整个数组初始化为未使用的值):
您应该创建另一个相同大小的数组,使用指示"尚未初始化"的值完全初始化它。
然后,每当您初始化原始数组的数组元素时,在同一索引处向第二个数组写入一个指示"已初始化"的值。
这样,"此条目是否已初始化?"这个问题可以通过查看第二个数组中的相同索引来回答。
但是,初始化数组可以通过以下方式完成
int values[5] = {0};
Thils 将使用给定的"0"初始化第一个条目,其余所有条目都隐式使用"0"作为默认值(与给定的零无关)。
那么"初始化?"的答案总是"是"。
(我看到您已经从注释中选择了正确的数组初始化。我保留此答案部分是为了清楚所用单个值的含义。
> 对于标量数据类型作为int
,C 确实没有一个普遍接受/定义的"未定义"值;如果将int
范围内的特定值解释为"未定义",则受制于单个代码。
通常,您将使用超出用例"实际"范围的内容来定义这样的值;例如,如果值表示数组的索引,则可以写#define UNDEF_INDEX UINT_MAX
,因为数组不太可能获得这样的大小。对于int,你可以说#define UNDEFINED_VALUE INT_MIN
.
#define UNDEFINED_VALUE INT_MIN
for (int i = 0; i < 5; i++) {
array[i] = UNDEFINED_VALUE;
}
...
for (int i = 0; i < 5; i++) {
if (array[i] == UNDEFINED_VALUE )
{
// the element has yet to be assigned
}
}