我有一个变量,它将存储-1,如果不是-1然后是1,但在我存储1之前我想检查NaN的变量。例如:
#include <stdio.h>
int main( void )
{
int someVar;
if (some condition)
someVar = -1;
else if((someVar == NaN) && (some other condition))
someVar = 1;
return 0;
}
如果true
中没有存储任何内容,那么第一个条件是否会在else if语句中返回someVar
?
答案 0 :(得分:3)
变量不能为“空”。它总是有价值。
您可以手动指定一个值,该值表示与字符串一样“空”:空字节(值为0
)表示字符串的结尾。在这里,它本身并不是空虚,但你得到了我的意思,希望如此。
因为变量不能为空,所以没有常见的NaN值;每个值都是一个数字,所以NaN(不是数字)没有意义 浮点格式IEEE 754支持NaN值,但这是唯一可能的,因为浮点数的某些值已被指定为含义。
答案 1 :(得分:2)
变量驻留在RAM中。 RAM永远不会是空的。每个单元格都有一个值。程序员是否已知该值,取决于程序员是否已初始化该变量。
我知道两种方式来表示变量的“空虚”。一种是拥有一个意味着“空”的值,比如“0”,或者MAX_INTEGER,或者你喜欢什么。如果算法逻辑强制您的变量只包含某些值,那么这就有效,因此您可以知道该值何时有效。如果没有,您可以说变量无效或为空。
如果您的变量可以包含任何值(在您的类型的限制范围内),那么解决方案可能是使用一个小结构,如下所示:
typedef struct
{
int value;
int is_empty;
} tVar;
以这种方式声明变量i
......
tVar i;
您可以将其初始化为空,如下所示:
i.is_empty = 1;
所以,你的程序变成了:
int main( void )
{
tVar someVar = {0,1}; // declaring and initializing it as empty
...
...
...
if (!someVar.is_empty) // if someVar is not empty...
{
someVar.value = -1;
someVar.is_empty = 0; // is not empty any more
}
else if (someVar.is_empty && (some_other_condition))
{
someVar.value = 1;
someVar.is_empty = 0;
}
return 0;
}
答案 2 :(得分:0)
你不能没有&#34;没有&#34;存储在变量中。每个变量都有价值。 在大多数情况下,会存储&#34; 0&#34;但在不常见的情况下,您的变量中会存储一些垃圾。它就是在你的变量把它放在记忆中之前就已经存在的东西了(那个垃圾就在那里)。
&#39; NaN&#39;你会遇到其他一些情况,例如除以零,等等。
答案 3 :(得分:0)
您始终拥有变量的值。如果你没有存储任何东西,它会存储一个通常称为“垃圾”的随机数,我们想避免它。因此,您无法检查变量是否为空,因为它永远不会。