0
votes

Qu'est-ce que cela signifie cette condition?

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;
}

c

2 commentaires

si (actuel-> oui) actuel = actuel-> oui; signifie "S'il y a une autre question lorsque l'utilisateur répond" oui ', puis mettez à jour actuel pour pointer cela question"


Est-ce une question sur le -> jeton?


4 Réponses :


2
votes

Ceci signifie si actuel-> oui pas 0 (non nul pointeur).


0 commentaires

2
votes

Vous obtenez l'adresse de OUI membre de type structure noeud * , par l'objet actuel objet. Ce qui est, si cela alloua la mémoire correctement, ce sera non nulle, et sinon ce sera 0 ou null . Par exemple, les allocations de mémoire peuvent échouer.

Donc, fondamentalement, la condition: si (actuel-> oui) {...} vérifie si la mémoire est attribuée correctement ou non.


0 commentaires

2
votes

Le code suivant: xxx

est équivalent à xxx

de sorte que la condition vérifie oui pour ne pas être null pointeur


1 commentaires

Pas seulement similaire, équivalent.



1
votes

Le si () construction en C est défini pour évaluer son argument et le comparer à 0 . En tant que tel, si (foo) est toujours équivalent à si (foo! = 0) ou si (foo! = Null) , compte tenu de ce que null se compare égal à 0 .

ou, mettre un autre moyen, si (myPoinger) vérifie si le pointeur pointe sur un objet valide. C'est un idiome très courant en programmation C.


Ceci est vrai même si vous écrivez si (a == b) . Ceci est totalement équivalent à si (((a == b)! = 0) : la valeur de a == b est soit 0 pour faux ou 1 pour true et ce résultat est ensuite comparé à 0 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) , car c'est équivalent à la production du 1 ou 0 puis comparer une seconde fois à 0 . Cependant, la langue est définie avec la comparaison supplémentaire contre 0 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 .


2 commentaires

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 : ".. 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 . 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 maintenant et laissé une seule mention pour clarifier ce que Si (pointeur) fait.