const int * foo : pointeur vers une variable constante de type entier. Ce qui signifie que tu ne peux pas en modifier la valeur, et donc que ceci est interdit (ie. erreur à la compilation) :
*foo = 42;
Mais comme un pointeur n'est que le stockage d'une adresse vers une zone mémoire, il suffit de copier cette adresse dans un autre pointeur d'entier non-constant...
int * bar = (int*)foo;
...pour pouvoir ensuite changer la valeur contenue dans le tas à cet endroit sans que le compilo n'y trouve rien à redire :
*bar = 42;
Et désormais :
printf("foo = %d -- bar = %d\n", *foo, *bar);
Affiche :
42 -- 42
Message édité par Elmoricq le 27-08-2013 à 16:00:58