Тест нескольких указателей в операторе If - PullRequest
2 голосов
/ 19 января 2010

с учетом указателя на структуру

struct a_struct  
{   
    int A; 
};  

Это нормально делать:

struct a_struct *ptr;  

//...

if( ptr != NULL && ptr->A == 1)  
{  
    //work with ptr struct  
}     

или вы должны проверить, является ли указатель действительным, прежде чем проверять одно из его полей.

if(ptr != NULL)
{
    if(ptr->A == 1)
    {
        //work with ptr struct
    }
}

Ответы [ 3 ]

9 голосов
/ 19 января 2010

Да, все в порядке.

Оператор && короткого замыкания в C, поэтому ptr->A == 1 будет оцениваться, только если ptr не равно нулю.

5 голосов
/ 19 января 2010

&& оценивает второй тест только в том случае, если первый был успешным, поэтому ваш код ( one if оператор) в порядке.

1 голос
/ 19 января 2010

Это сработает, и на самом деле это довольно распространенная идиома. Если вы пишете предложение else, вам не нужно беспокоиться о том, какая проверка вас там постигла, но это ничем не отличается от других мульти-условий if -check.

...