Возвращаемое значение функции == 0?
Итак, у меня есть следующая функция:
int functionX()
{
return strcmp(array1,array2)==0;
}
Зачем кому-то делать это? ==0 предполагает, что эта функция всегда будет возвращать FALSE. Это правда или мне не хватает некоторых экзотических синтаксических праймеров?
6 ответов
(strcmp(array1, array2) == 0)
это выражение, которое оценивает strcmp()
, который может вернуть отрицательное, положительное или нулевое число. Когда две строки одинаковы, strcmp()
возвращается 0
,
== 0
сравнивает возвращаемое значение strcmp()
с 0
, Вы бы использовали это в том случае, когда вам нужно functionX()
вернуть "истинное" (ненулевое) значение, когда две строки одинаковы. В частности, strcmp(array1,array2)==0
вернусь 1
в этом случае или 0
иначе.
Для получения дополнительной информации о strcmp()
, посмотрите на его справочную страницу.
Здесь нет ничего экзотического... вы возвращаете результат выражения strcmp(array1, array2)==0
, который сравнивает результат strcmp
с 0 и возвращает 1, если они сравниваются равными, 0, если они разные.
В общем, functionX
вернет 1, если результат strcmp
0 (т. е. если две сравниваемые строки равны), иначе 0.
strcmp()
возвращает целое число, равное 0, если две строки эквивалентны, в противном случае - не ноль.
Эта функция просто "инвертирует" результат, в том смысле, что она вернет 1, если результат равен 0, или 0, если результат не равен нулю. В C все, что не равно 0, считается "истинным", поскольку нет реального логического типа (кроме C99).
strcmp()
возвращает 0, если его два аргумента сравниваются равными. В вашем примере functionX()
возвращает "истину", если array1
а также array2
сравнить равных.
Сравнение с нулем - это то же самое, что отрицание логического выражения, поскольку в C вы используете целые числа в качестве логических значений. Так
return strcmp(array1,array2)==0;
это то же самое, что
return !strcmp(array1,array2) ;
Поскольку strcmp возвращает ноль только в том случае, если обе строки равны, то выражение вернет true, если строки равны.
Эта конструкция сравнивает результат strcmp
с 0 и возвращает результат сравнения