1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include <stdlib.h>
#include <stdio.h>
typedef struct t_C {
int crepe;
}C;
typedef struct t_B {
C *p_C;
}B;
typedef struct t_A {
B **pp_B;
}A;
void display_answer(A *p_A)
{
//Je dois utiliser un double pointeur pour modifier la structure pointée par pp_B dans d'autres fonctions sans devoir retourner la nouvelle adresse (cela ne pose pas de problème)
//par contre, comment faire pour accéder l'entier c depuis un A* avec un enchainement de dé-références tel que :
int answer;
//answer = p_A->pp_B->p_C->crepe; //Dereferance pp_B une seul fois ---> error: request for member 'p_C' in something not a structure or union
//answer = p_A->*pp_B->p_C->crepe; //Essai de double dereferanciation test.c:26: error: expected identifier before '*' token
//answer = p_A->(*pp_B)->p_C->crepe; //Essai de double dereferanciation test.c:27: error: expected identifier before '(' token
answer = p_A->pp_B[0]->p_C->crepe; //Dereferance avec un [0] puis un -> cela marche, mais c'est fort laid.
printf("The answer is %d\n", answer);
}
int main(int argc, char** argv)
{
A *p_A = malloc(sizeof(A));
B *p_B = malloc(sizeof(B));
C *p_C = malloc(sizeof(C));
p_A->pp_B = &p_B;
p_B->p_C = p_C;
p_C->crepe = 42;
display_answer(p_A);
//free ...
return EXIT_SUCCESS;
} |
Partager