J’avais l’impression qu’il était possible d’accéder aux données d’un sous-nœud d’une liste chaînée ou d’une structure similaire en utilisant ensemble les opérateurs flèche et point, comme suit:
typedef struct a{ int num; struct a *left; struct a *right; }tree; tree *sample; ... if(sample->left.num > sample->right.num) //do something
mais quand j’essaie d’implémenter cela, utilisez -> et. pour accéder aux données d’un sous-noeud, l’erreur “Demande de membre num dans une structure ou une union”.
Utilisez ->
pour les pointeurs; utiliser .
pour les objects.
Dans votre cas particulier, vous voulez
if (sample->left->num > sample->right->num)
parce que tous les sample
, sample->left
et sample->right
sont des pointeurs.
Si vous convertissez l’un de ces pointeurs dans l’object pointé; utiliser .
au lieu
struct a copyright; copyright = *(sample->right); // if (sample->left->num > copyright.num) if (*(sample->left).num > copyright.num)
Puisque je ne le vois pas mentionné explicitement:
sample-> left donne une struct a*
, pas une struct a
, nous avons donc affaire à des pointeurs. Donc, vous devez toujours utiliser ->
.
Vous pouvez cependant utiliser sample->left->num
.
. est destiné à accéder aux membres d’une structure (ou d’un syndicat), par exemple
struct S { int x; } S test; test.x;
-> est un moyen plus court d’écrire (* pointer_to_struct) .struct_member
sample->left
et sample->right
sont également des pointeurs, vous voulez donc:
if (sample->left->num > sample->right->num) { // do something }