|
1
7
在C中没有这样的东西。静态数组的内容总是“set”。但是,您可以填充一些特殊值来假装它未初始化,例如。
|
|
2
6
这些值都是未定义的(因此是随机的)。 您可以显式地将所有值归零,以便至少有一个好的起点。但是使用幻数来检测对象是否已经初始化被认为是不好的做法(但是初始化变量被认为是好的做法)。
但是,如果您想显式地检查它们是否在创建之后被显式地设置(不使用幻数),您需要将该信息存储在另一个结构中。
|
|
|
3
2
但是,您可以在默认情况下使用memset()用一些标准值(如0或INT\ MIN)填充它,然后编写isset()代码。 |
|
|
4
2
一些 任何时候都在每个单元格中显示值。如果数组未初始化并且是自动的,或者是在堆上分配的,那么这些值可能是随机的,但它们是存在的。
|
|
|
5
1
一种解决方案可能是使用单独的标志数组。指定其中一个元素时,请在布尔数组中设置标志。 也可以使用指针。可以使用空指针来表示尚未分配的数据。我举了一个例子:
您可以创建一个分配内存和设置数据的函数,以及另一个类似于PHP中isset函数的函数,方法是为您测试NULL。
编辑:确保完成后释放内存。另一个函数可用于取消分配某些元素或整个数组。 我以前使用过空指针来表示数据尚未创建或需要重新创建。 |
|
|
6
1
我喜欢的一种方法是创建两个数组,一个是位数组,表示设置了数组的哪些索引,另一个包含实际值。即使在不需要知道数组中某个项是否“已设置”的情况下,它也可以是一个有用的优化。将每元素1位的位数组归零要比初始化每元素8字节的数组快得多
我使用这个技巧的一个实际例子是在一个子串搜索函数中,使用一个Boyer-Moore风格的坏字符跳过表。该表需要256个类型的条目
|