好的,所以我有以下功能:
int functionX()
{
return strcmp(array1,array2)==0;
}
为什么会有人这样做?==0 表示此函数将始终返回 FALSE。这是真的还是我错过了一些奇特的 C 语法引物?
(strcmp(array1, array2) == 0)
是一个计算 的表达式strcmp()
,它可以返回一个负数、正数或零数。当两个字符串相同时,strcmp()
返回0
。
== 0
strcmp()
正在比较with的返回值0
。当两个字符串相同时,您可以在需要functionX()
返回“真”(非零)值的情况下使用它。具体来说,strcmp(array1,array2)==0
将1
在这种情况下返回,0
否则。
有关更多信息strcmp()
,请查看其手册页。
strcmp()
如果它的两个参数比较相等,则返回 0。在您的示例中,functionX()
返回“true” iffarray1
并array2
比较相等。
strcmp()
返回一个整数,如果两个字符串相等则为 0,否则为非零。
此函数只是“反转”结果,如果结果为 0,它将返回 1,如果结果不为零,则返回 0。在 C 中,任何非 0 都被认为是“真”,因为没有真正的布尔类型(C99 除外)。
这里没有什么奇特的......你正在返回表达式的结果strcmp(array1, array2)==0
,它将结果strcmp
与 0 进行比较,如果它们比较相等则返回 1,如果它们不同则返回 0。
总而言之,functionX
如果 的结果strcmp
为 0(即如果两个比较的字符串相等)则返回 1,否则返回 0。
与零比较与否定布尔表达式相同,因为在 C 中使用整数作为布尔值。所以
return strcmp(array1,array2)==0;
是一样的
return !strcmp(array1,array2) ;
由于 strcmp 仅在两个字符串相等时才返回零,因此如果字符串相等,则表达式将返回 true。
此构造将 的结果strcmp
与 0 进行比较并返回比较的结果