Que faut-il ce actuel -> oui code> évaluer dans la condition? (Ce n'est pas un code complet, vous pouvez assumer une question dans Oui) typedef struct node {
char *question;
struct node *no;
struct node *yes;
} node;
node *current;
if (current->yes) {
current = current->yes;
}
4 Réponses :
Ceci signifie si actuel-> oui code> pas 0 code> (non nul pointeur). p>
Vous obtenez l'adresse de Donc, fondamentalement, la condition: OUI code> membre de type structure noeud * code>, par l'objet actuel code> objet. Ce qui est, si cela alloua la mémoire correctement, ce sera non nulle, et sinon ce sera 0 ou null code>. Par exemple, les allocations de mémoire peuvent échouer. p>
si (actuel-> oui) {...} code> vérifie si la mémoire est attribuée correctement ou non. P>
Le code suivant: est équivalent à p> de sorte que la condition vérifie oui pour ne pas être null pointeur p > p>
Pas seulement similaire, équivalent.
Le ou, mettre un autre moyen, Ceci est vrai même si vous écrivez si () code> construction en C est défini pour évaluer son argument et le comparer à 0 code>. En tant que tel, si (foo) code> est toujours équivalent à si (foo! = 0) code> ou si (foo! = Null) code>, compte tenu de ce que null code> se compare égal à 0 code>. p>
si (myPoinger) code> vérifie si le pointeur pointe sur un objet valide. C'est un idiome très courant en programmation C. P>
si (a == b) code>. Ceci est totalement équivalent à si (((a == b)! = 0) code>: la valeur de a == b code> est soit 0 code> pour faux ou 1 code> pour true et ce résultat est ensuite comparé à 0 code> par la machine abstraite pour déterminer quelle branche à exécuter. De toute évidence, les compilateurs utiliseront directement le résultat de la comparaison dans si (a == b) code>, car c'est équivalent à la production du 1 code> ou 0 code> puis comparer une seconde fois à 0 code>. Cependant, la langue est définie avec la comparaison supplémentaire contre 0 code> pour le rendre entièrement agnostique sur le type d'expression utilisé dans les parenthèses. Toute la langue se soucie d'être que la valeur résultante est comparable à 0 code>. P>
Détail: "La construction if () dans C est définie pour évaluer son argument et la comparer à NULL si la valeur est un pointeur ou à 0 pour tous les autres types." -> C a la déclaration IF i>: ".. L'expression se compare inégale à 0." Sans aucune considération de type impliquant une manière d'une manière ou d'une autre, impliquant null code>. Effet net est MOX NIX .
@ Chux-Restassatemonica Droite. J'essayais d'être trop précis, avec le résultat d'être moins précis ... :-( J'ai supprimé la plupart des discussions sur null code> maintenant et laissé une seule mention pour clarifier ce que Si (pointeur) code> fait.
si (actuel-> oui) actuel = actuel-> oui; code> signifie "S'il y a une autre question lorsque l'utilisateur répond" oui ', puis mettez à jouractuel code> pour pointer cela question"Est-ce une question sur le
-> code> jeton?