-
Premièrement :
q est de type int (*) [2], c-a-dire que c'est un pointeur vers un tableau de deux élément de type int.
donc, quand on fait ça :
Code:
q = (int (*)[2])&a;
C'est a dire que la case en mémoire qui contient l'adresse q, vas contenir la valeur de l'adresse de a, c-a-dire, accéder au tableau a par a ou * q devient pareil .
Deuxièmement :
Quand on ajoute un entier a une adresse, on modifie l'emplacement en mémoire referencié par cette adresse (risque perte de données) .
Troisièmement :
printf("%d\n",(*q)[3]); pareil que : printf("%d\n",a [3]);
printf("%p\n",q+2); regarde ma deuxième réponse .
printf("%d\n",(*(q+3))[1]); Aucune idée .
;)