2010-01-19 5 views
2

considérant un pointeur vers une structMultiple Test pointeur dans Si Déclaration

struct a_struct 
{ 
    int A; 
}; 

est-il autorisé à faire:

struct a_struct *ptr; 

//... 

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

ou si vous tester si le pointeur est valide avant de tester pour le son champ.

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

Répondre

9

Oui, c'est bon.

L'opérateur && court-circuite en C, donc ptr->A == 1 ne sera évalué que si ptr est non nul.

5

&& évalue le second test que si le premier a réussi, de sorte que votre code (une déclaration if) est parfaitement bien.

1

Cela fonctionnera, et est en fait un idiome assez commun. Si vous écrivez une clause else, vous devez vous soucier du contrôle qui vous a donné un coup de pied, mais ce n'est pas différent de toute autre condition multiple if -check.