Salut,

Alors voilà, j'ai des instructions sur les pointeurs que je ne comprend pas bien.
Je les ai écris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main(){
  int a[] = {12,23,34,45,56,67,78,89,90,100};
  int *p, (*q)[2];
  p=a;
  q = (int (*)[2])&a;
 
  printf("%p %p %p\n",a,&p,&q);
 
  printf("%d\n", *p+2);  //14
  printf("%d\n", *(p+2)); //34
  printf("%p\n", &p+1);
  printf("%p\n",&a[4]);
  printf("%p\n",&a[4]-3);
  printf("%p\n",a+3);
  printf("%d\n",&a[7]-p);
  printf("%p\n",p+(*p-10));
  printf("%d\n",*(p+*(p+8)-a[7])); //23
  printf("%d\n",(*q)[3]);
  printf("%p\n",q+2);
  printf("%d\n",(*(q+3))[1]);
  return 0;
}
Dans un premier temps j'ai hésiter à me sucider en me coupant les veines avec la feuille d'exam (c'était bien dans un exam de c) ... et dans un second temps aussi ... Mais bon j'ai quand même réussi à comprendre certaines instruction (3 avec les "//" et qqunes avec les adresses). J'ai alors plusieurs questions :
- que fait l'instruction qui affecte q ?
- que se passe t-il quand on ajoute 3 a une adresse ? Genre &a[4]-3 ou a+3 , comment expliqueriez vous ce résultat ?
- que font les 3 dernières instructions exactement ?

Après avoir regardé qq cours sur les pointeurs, je ne trouve toujours pas réponses à ces questions ... Si qqun pourrait m'éclairer je serai très reconnaissant.

Merci d'avance.

Edit : j'ai oublié de vous donner les résultats de ce prog :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
0xbfdb8d60 0xbfdb8d8c 0xbfdb8d88
14
34
0xbfdb8d90
0xbfdb8d70
0xbfdb8d64
0xbfdb8d6c
7
0xbfdb8d68
23
45
0xbfdb8d70
89