如何在c ++中检查NULL?

RWe*_*ndi 1 c++

比方说,我有一个struct和一个struct数组.我想要做的是遍历数组并检查是否有任何项为null.我尝试检查项目对NULL和(struct*)0,似乎不起作用.有没有可靠的方法来检查空值?

更新示例代码

struct Test{
 int a;
};

Test testArray[size];

for (int i = 0; i < testCount; i++)
{
    if (testArray[i] == NULL) //this doesnt work
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

RWendi

Mar*_*tin 18

如果你有一个结构数组,那么没有指针,所以检查null是没有意义的.

n个结构的数组实际上是在记忆中一个接一个地排列的结构中的n个.

你能把它改成一个指向结构的指针数组,将它们全部初始化为NULL,并根据需要创建它们吗?我会考虑为什么你想先检查一下null - 感觉你做错了什么.

(编辑添加到问题的代码)

您没有展示如何定义testArray,但我怀疑您已完成以下操作:

Test testArray[testCount];
Run Code Online (Sandbox Code Playgroud)

如果您确实需要与null进行比较,请尝试以下操作:

Test *testArray[testCount];
for (int i = 0; i < testCount; i++)
{
    testArray[i] = new Test;
}
Run Code Online (Sandbox Code Playgroud)

此时,没有条目将为NULL,但如果稍后在您的代码中执行以下操作:

testArray[3] = NULL;
Run Code Online (Sandbox Code Playgroud)

那么你将能够通过你在问题中提供的循环来检测它.

你能说明为什么要与NULL进行比较吗?

(它继续增长 - 这次是为了解决有关初始化的问题):

正如其他人所提到的,与NULL比较并不是判断某些事情是否被初始化的有效方式.可能最好的方法是以这样的方式编写代码,以保证它将被初始化.

执行此操作的最佳方法可能是在Test结构上放置一个默认构造函数(您可以在C++中执行此操作,但不能在C中执行此操作).就像是:

struct A {
    int x;
    A() : x(0) { }
};
Run Code Online (Sandbox Code Playgroud)

会做得很好.现在,阵列中的所有结构都保证存在,并且在x值设置为0的情况下进行初始化.