Допустим, a
- это указатель, и после выделения для него памяти я хочу проверить, успешно ли выделена память, я видел два способа сделать это:
if(a != NULL)
if(a)
В чем разница между первым и вторым утверждениями?
Допустим, a
- это указатель, и после выделения для него памяти я хочу проверить, успешно ли выделена память, я видел два способа сделать это:
if(a != NULL)
if(a)
В чем разница между первым и вторым утверждениями?
условие :
if(a != NULL)
такое же, как условиеif(a)
?
Они достигают той же цели. Единственная реальная разница заключается в удобочитаемости.
Их эффект одинаков, поскольку они приведут к одному и тому же результату.
NULL
— это макрос, который почти всегда равен 0, поэтому:
if(a != NULL)
эквивалентно:
if(a != 0)
что очень похоже на:
if(a)
так как он проверит, является ли выражение a
истинным.
Таким образом, если a
является указателем, они будут одинаковыми. Если это не так, то это будет зависеть от того, как определяется NULL
(что, как я уже сказал, почти всегда 0).
Согласно c faq :
if(p) эквивалентно if(p != 0)
и это контекст сравнения, поэтому компилятор может сказать, что (неявный) 0 на самом деле является константой нулевого указателя, и использовать правильное значение нулевого указателя. Здесь нет никакого обмана; компиляторы работают таким образом и генерируют идентичный код для обеих конструкций. Внутреннее представление нулевого указателя не имеет значения.
(a != NULL) возвращает логическое значение, которое совпадает с (a). Оператор if возвращает false, если содержимое равно 0, и true в противном случае. NULL означает 0, поэтому, если a == 0, if возвращает false. Так что это точно то же самое для компилятора.
Надеюсь, это поможет вам!
Нет никакой функциональной разницы; они эквивалентны, и оба они проверяют нулевой указатель.
Любые предпочтения чисто субъективны. Просто используйте то, что вам нравится, или то, за чем следуют ваши коллеги-программисты в вашем проекте/организации.
a
является указателем, может быть иначе, еслиa
не является указателем, в зависимости от определенияNULL
. - person Antti Haapala   schedule 19.10.2017if(a != NULL)
иif(a)
— логическое значение. -if(a != NULL)
в этом случае мы напрямую устанавливаем условие не равным нулю. -if(a)
, но в этом случае, когда a не равно нулю, если значение bool будет истинным, и запустите оператор if, а когда a равно null, значение bool будет ложным, и если не будет выполняться. ТАК оба заканчиваются тем же результатом. - person Salman   schedule 19.10.2017