Quelqu'un arrive-t-il à expliquer le comportement ce code un fois compilé (avec g++) puis exécuter:

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
 
int main()
{
	const int a = 2;
	int * pa;
	const int * cpa;
 
	cpa = &a;
	pa = (int*)cpa; //Pour gruger le mot clé const
	*pa = 4;
 
	printf("a = %d\n", a);
	printf("*pa = %d\n", *pa);
 
	return 0;
}
On a alors la sortie suivante :

a = 2
*pa = 4

Pourquoi n'a-t-on pas :

a = 4
*pa = 4

pa est censé pointé le contenu de a ?
c'est d'ailleurs le résultat obtenu avec gcc...