8

如果我有类型的指针T (T*)并且我有一个它们的数组,T* array[N]这两种方法是否允许我稍后检查哪些条目是空指针以延迟初始化每个存储桶中的东西?

memset(array, 0, sizeof(T*)*N);

或者

for (int i = 0; i < N; ++i)
    array[i] = NULL;

memset电话也让我以后做if (array[i] == NULL) ...吗?

如果不是,我不想引入未定义的行为..

4

2 回答 2

11

虽然技术上不要求空指针值全为零位,但我不知道有任何系统不是全零位。所以任何一种方法都应该有效。

然而,有一种更简单的方法来初始化一个数组,即使在一些邪恶的实现中,它也会设置正确的空指针值:

T *array[N] = {};

或者,如果您动态分配它:

T **array = new T*[N]();
于 2012-10-04T21:14:05.560 回答
2

形式上,该memset方法不起作用,因为不要求空指针由0内存中的值表示。在实践中它工作得很好。

比两者都好:std::uninitialized_fill; 标准库实现者可以做一些你无法优化性能的事情。

于 2012-10-04T21:13:18.997 回答