Musaran Cerveaulté | Rappelons un peu d'arithmétique des pointeurs:
pointeur+i équivaut à &pointeur[i].
pointeur[i] équivaut à *(pointeur+i)
Et bien sûr, un tableau (a) utilisé dans une expression devient un pointeur sur son premier élément (&a[0]).
Dans cette explication, j'utilise comme nom pour case de tableau l'expression qui l'a initialisée, mise entre "guillemets".
"," signifie qu'une variable a été modifiée (-- ++)
":" signifie qu'on change d'objet dans l'expression
Code :
- //simples pointeurs
- char* s1= "ENTER";
- char* s2= "NEW";
- char* s3= "POINT";
- char* s4= "FIRST";
- //tableau de pointeurs
- char* c[]= {s1, s2, s3, s4 };
- //tableau de pointeurs sur pointeurs
- char** cp[]= {
- c+3, //pointeur sur "s4" dans c
- c+2, //pointeur sur "s3" dans c
- c+1, //pointeur sur "s2" dans c
- c //pointeur sur "s1" dans c (c seul équivaut à c+0)
- };
- //pointeur sur pointeur sur pointeur
- char*** cpp= cp; //cp est pris comme pointeur sur "c+3" dans cp
- int main(void) //voici un beau main standard
- {
- printf("%s", **++cpp );
- // ++cpp //incrémenter, cpp pointe alors sur "c+2" dans cp
- // * //déréférencer: "c+2" dans cp
- // * //déréférencer: "s3" dans c
- //affiche "POINT"
- printf("%s ", *--*++cpp+3 );
- // ++cpp //incrémenter, cpp pointe alors sur "c+1" dans cp
- // * //déréférencer: "c+1" dans cp
- // -- //décrémenter, "c+1" pointe alors sur s1 dans c
- // * //déréférencer: "s1" dans c
- // +3 //équivaut à &s1[3]: pointeur sur le 2ème 'E' de "ENTER"
- //affiche "ER " (espace dans le format du printf)
- printf("%s", *cpp[-2]+3 );
- // cpp[-2] //équivaut à *(cpp-2): "c+3" dans cp
- // * //déréférencer: "s4" dans c
- // +3 //équivaut à &s4[3]: pointeur sur le 'S' de "FIRST"
- //affiche "ST"
- printf("%s\n", cpp[-1][-1]+1 );
- // cpp[-1] //équivaut à *(cpp-1): "c+2" dans cp (pointeur sur "s3" de c)
- // [-1] //équivaut à *(&c[2]-1) == *&c[1] == c[1]: "s2" de c
- // +1 //équivaut à &s2[1]: pointeur sur le 'E' de "NEW"
- //affiche "EW\n"
- return 0; //pas l'oublier...
- }
|
"pointer stew" signifie "compote/ragoût de pointeurs".
Et voilà. ---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
|