我看到的代码看起来像是在没有实际if的情况下尝试做if语句,而且我很困惑它实际上在做什么。例如,
int* value;
int thisValue = 0;
int checkedValue = 1;
*value = thisValue == checkedValue
这实际上是在没有if?
的if语句中答案 0 :(得分:4)
这只是评估一个布尔表达式。并将其存储在任何内存位置value
指向(在您的特定代码段value
中未分配,因此行为未定义)。
if
允许您根据布尔表达式的值执行不同的代码。
例如,
if (a == b) {
printf("a and b are the same\n");
}
表现如下:
int same = (a == b);
if (same) {
printf("a and b are the same\n");
}
虽然第一个通常更干净,除非你有理由在if语句之后想要same
变量。但第二个更靠近C代码在编译时生成的机器指令。
尽管==
语句中经常使用像if
这样的布尔比较运算符,但没有什么能够强制它们仅用于 。您可以在代码中的任何位置使用==
运算符来生成布尔表达式,就像您可以在任何位置使用+
运算符来生成数值表达式一样。
答案 1 :(得分:3)
您似乎误解了if
条件语句的概念。
==
或>
之后的括号不限制使用!=
,if
,while
等运算符。他们进行操作,就像任何其他操作员一样。例如;
// evaluates into...
2 + 3; // 5
9 / 4; // 2
7; // 7
5 == 5; // 1
4 != 5; // 1
9 < 1; // 0
依此类推......像均等和不等式这样的布尔运算符可以评估为0
或1
。如果为true,则评估为1
,如果为false,则评估为0
。
每个不是0
的值都被C语言解释为true。每个非零值都是真的。 尽管每个非零值都为真,但布尔运算的结果严格为零或一,而不是任何其他数字。
就像您可以在if
括号之外使用这些内容一样,您可以在if
括号内使用其他内容,如下所示:
if ( 2 + 3 ) {
// this block will happen
// because 2 + 3 is 5
// and 5 is non-zero
}
if ( 10 - 6 - 4 ) {
// this block won't happen
// because 10 - 6 - 4 is zero
}
所以,是的......最后一个例子:
6 && 4; // evaluates to 1
0 && 4; // evaluates to 0
答案 2 :(得分:1)
不,这不是if
声明。它只是改变'thisValue == checkedValue'并将其分配给=
运算符左侧的变量。
int isTrue = thisValue == checkedVaue;
稍后可以在if
声明中使用。
if ( isTrue )
{
...
}
这相当于
if ( thisValue == checkedVaue )
{
...
}
也可以在while
声明中使用。
while ( isTrue )
{
...
}
答案 3 :(得分:-1)
首先,正如alecbenzer所说,代码是致命的错误,指针“值”没有指向任何内存,如果你将任何内容存储到“* value”,它将导致分段错误。
修复代码:
int resultHolder;
int* value;
value = &resultHolder;
int thisValue = 0;
int checkedValue = 1;
*value = thisValue == checkedValue;
对于你的问题,(* value = thisValue == checkedValue)不是if语句。
==是一个运营商,就像+。
a + b给出a和b之和。
a == b给出a和b是否相等的结果,结果为真(c中的整数1)或false(c中的整数0)。
现在,想想* value =(a == b);在你读取* value =(a + b);的方式中,它只是将一个评估结果分配给一个变量。