plus simple de parler d’adresse 0x2dcf0239 que de l’adresse 768541241. Certains langages permettent d’accéder et 
donc de voir l’adresse de la zone mémoire d’une variable, tout simplement l’adresse de la variable. 
b. Java : des limites qui n’en sont pas 
Il va vous falloir légèrement déchanter. Le langage Java utilisé depuis le début de cet ouvrage ne permet pas de 
connaître l’adresse de la variable. En fait, la plupart des choses décrites dans les prochaines pages seront en partie 
inaccessibles à ce langage. Et parmi ces choses, la possibilité d’accéder à l’adresse mémoire des diverses variables. 
La raison est simple : Java est un langage évolué de haut niveau qui n’a pas (et vous avec) à interférer directement 
avec  la  mémoire  de  l’ordinateur. Dans un programme Java, la mémoire est allouée dynamiquement par la machine 
virtuelle qui lui fournit le nécessaire. Le programme Java ne sait pas où sont réellement stockées ses données en 
mémoire centrale, c’est la machine virtuelle qui s’occupe de tout. S’il avait été possible de voir une adresse, celle­ci 
aurait été celle au sein de la mémoire réservée par la machine virtuelle, sans pouvoir faire le lien avec la mémoire 
physique. 
Ce système présente de nombreux avantages. Puisque c’est la machine virtuelle qui gère à votre place la mémoire, 
vous n’avez plus à vous soucier de problèmes propres à des langages de bas niveau. En C par exemple, quand vous 
créez une chaîne de caractères, c’est en fait un tableau de caractères. Si vous débordez de la taille que vous avez 
initialement  fixée,  vous  risquez  de  graves  dysfonctionnements  et  plantages,  car  l’espace mémoire situé après est 
peut­être réservé pour une autre variable, ou un bout de programme. C ne vous préviendra pas en cas d’erreur dans 
les indices de tableaux non plus. Java vous débarrasse de tous ces problèmes puisqu’il gère tout ça à votre place. 
Aucun risque de dépasser quoi que ce soit, aucun risque d’oublier de libérer de la mémoire, etc. 
Vous  verrez  que  Java  gère  très  bien  pour  certaines  choses  les  références,  comme  cela  vous  a  brièvement  été 
expliqué dans le chapitre Les tableaux et structures sur les tableaux. 
c. Brefs exemples en C 
Le langage C est un langage de bas niveau permettant un accès direct au contenu de la mémoire physique, tout au 
moins celle réservée pour votre programme. En C vous pouvez afficher l’adresse d’une variable très simplement. Le 
bout de code suivant affiche le contenu et l’adresse d’une variable entière longue. Il suffit en C de rajouter le signe 
"&" (ET commercial) avant le nom de la variable. La chaîne ésotérique %#xd signifie que le &i est une valeur entière 
(d) qui doit être convertie à l’affichage en hexadécimal, avec un préfixe 0x avant (#), le % indiquant de remplacer les 
caractères accolés par la variable située en paramètre, dans l’ordre. 
long i=123456;
printf("%d à l’adresse %#xd\n",i,&i);
Le résultat varie évidemment d’une machine à l’autre, et n’est jamais le même si on relance le programme plusieurs 
fois : 
123456 à l’adresse 0xbf9f8420d
C permet aussi de connaître la longueur d’une variable, le nombre d’octets qu’elle utilise, avec la fonction sizeof(). 
printf("%d à l’adresse %#xd, taille de %d octets\n",i,&i,sizeof(i));
Une variable de type long est codée sur 4 octets sur un ordinateur 32 bits, donc le résultat ne provoque aucune 
surprise. 
123456 à l’adresse 0xbfa03430d, taille de 4 octets
2. Le pointeur 
a. Principe et définition 
Que ce soit avec des langages de bas niveau, de haut niveau comme Java ou en algorithmique, il peut être utile de 
trouver  des  moyens  de  manipuler  directement  ou  indirectement  des  adresses  de  variables  ou  autres  éléments 
(tableaux, types structurés, objets). En Java ce n’est pas directement possible, vous verrez un autre moyen. Mais la 
notion est importante, y compris pour ce langage. 
Vous n’aurez que rarement l’occasion, voire jamais, de rentrer une adresse à la main dans une variable. Même en C, 
vous partirez généralement d’une adresse déjà définie (celle d’une variable, d’un tableau, etc). 
Dans les langages supportant les manipulations d’adresses mémoire, il est courant de manipuler ces adresses au 
travers de variables particulières qui ne contiennent non pas une donnée, mais une adresse mémoire. Ce sont des 
- 2 -
© ENI Editions - All rigths reserved - Jonifar lina
164
Précédent

- 164/220

Suivant