Arithmétique du pointeur C pour les tableaux 2D

// ssortingngs is a 2D array (each ssortingng is 11 bytes long) char ssortingngs[][11] = {"0123456789", "2222244444", "3333366666"}; printf("Ssortingng 3 Character 2 is %c\n", ssortingngs[2][1]); 

Comment coder cette instruction print en utilisant l’arithmétique de pointeur au lieu des ssortingngs[2][1] ?

En C, a[b] est identique à *(a+b) (et comme l’addition est commutative, cela signifie aussi qu’elle est équivalente à b[a] . en utilisant des choses comme x["ssortingng"]; ;. Inutile de dire qu’il est préférable d’éviter ce genre de chose à moins que vous ne soyez intentionnellement méchant …

Edit: pour tous ceux qui sont sûrs de bien comprendre le sujet, n’hésitez pas à parsingr ce qui suit et à prédire correctement son résultat avant de l’exécuter:

 #include  char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char **cp[] = { c+3, c+2, c+1, c }; char ***cpp = cp; main() { printf("%s", **++cpp); printf("%s ", *--*++cpp+3); printf("%s", *cpp[-2]+3); printf("%s\n", cpp[-1][-1]+1); return 0; } 

Si ma mémoire est bonne, le crédit (blâme?) Pour ce code particulier revient à Thad Smith.

Comment ai-je fait avec ça?

 char ssortingngs[][11] = { "0123456789", "2222244444", "3333366666" }; printf("Ssortingng 3 Character 2 is %c\n", *(*(ssortingngs + 2) + 1)); 
  *(*(ssortingngs+2)+1)