Если мы имеем
char *val = someString;
и затем скажите
if(val){
....
}
что if
оператор, на самом деле проверяющий здесь?
Ваш оператор if
эквивалентен:
if (val != NULL) { ...
FAQ comp.lang.c содержит этот вопрос и ответ , в котором более подробно объясняется, почему это так.
Это проверка, содержит ли val указатель NULL. Если бы вы сказали
char * val = NULL;
if ( val ) {
...
}
, тест не прошел бы.
Как уже было сказано другими, проверяется, не является ли указатель char NULL. Если вы хотите проверить, не пуста ли строка, попробуйте strlen.
val - указатель, это утверждение равно if(val !=0), в то время как 0 также определяется как NULL, поэтому будет проверено, указывает ли указатель на NULL адрес, имейте в виду, что NULL указатель строки не то же самое, что пустая строка
Выполняется проверка if (val! = 0)
. В C все ненулевые значения истинны, ноль - ложь.
независимо от того, является ли val нулевым указателем или нет.
val
- указатель на символ. Это может быть установлено на любой адрес - действительный или недействительный -. Оператор if просто проверяет, не является ли val ненулевым:
if (val)
эквивалентно
if (NULL! = Val)
эквивалентно
if ((void *) 0! = Val)
Тем не менее, указатель может указывать на недопустимое место, например на память, которая не находится в адресном пространстве вашего приложения. Поэтому очень важно инициализировать указатели до 0, иначе они будут указывать на неопределенные местоположения. В худшем случае это местоположение может быть действительным , и вы не заметите ошибки.
Оператор проверяет, не является ли val
, которое то же самое, что someString
, не NULL
. Обычно if (v)
является сокращением для if (v! = 0)
.
Просто проверяется, является ли значение NULL или нет.
Вышеупомянутое условие if проверяет, указывает ли указатель на ненулевую строку. Если этот указатель указывает на любую ненулевую строку, тогда условие будет быть правдой или ложью.