比方说,我有一个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的情况下进行初始化.