|
|
Pointeurs
|
La
notion de pointeur est d'une importance primordiale dans ce langage.
On ne peut pas aller très loin si on ne l'a pas clairement comprise.
Or, des générations d'étudiants vous diront avoir eu du
mal à la saisir rapidement.
Aussi vais-je m'efforcer de l'expliquer du mieux possible.
Pour comprendre la notion de pointeur en langage C, il faut avoir à l'esprit la manière dont votre ordinateur organise et accède à la mémoire.
Nous présentons ci-dessous le schéma d'une mémoire organisée comme une suite d'octets numérotés par des nombres de 16 bits appelés adresses. On peut parler de l'adresse d'un octet.
Ainsi, les adresses s'étendent
de 0 à 216 = 65 535. Soit, en hexadécimal de 0 à
FFFF.
On fait plus volumineux aujourd'hui, mais le principe reste le même.

|
La
figure ci-dessus montre le contenu de quelques octets de la mémoire
:
|
|
| A l'adresse
FA71 écrite en hexadécimal,
vous trouvez le code binaire
de la lettre 'S' Ce code que nous avons écrit sous la forme 'S' pourrait s'écrire 53 en hexadécimal, 01010011 en bianire, et 83 en décimal, mais nous avons trouvé 'S' plus pratique icii. |
|
| Le mot
"SALUT" est manifestement écrit sur 5 octets couvrant l'étendue
mémoire de l'adresse FA71 à l'adrese FA75. L'adresse FA76 pointe sur un octet dont la valeur binaire est 00000000. Comme nous le verrons plus tard, le langage C se sert de cette valeur nulle pour indiquer qu'une chaîne de caractères est terminée. Zéro est le terminateur de chaîne pour le langage C. |
|
| Les autres emplacements de la mémoire contiennent d'autres valeurs binaires pouvant représenter n'importe quel type de variable ou de constante. | |
Pour la lettre 'S' du mot salut on peut s'exprimer de deux manières :
Ainsi, un objet informatique enregistré en mémoire sera désormais caractérisé :
Tous ce éléments étant liés entre eux.
|
POINTEURS
- Référencement -
|
|
|
En fait,
c'est très simple : Un pointeur est précisément un objet qui contient les deux informations suivantes :
Ainsi,
lorsque nous déclarons une variable x de type flottant (4 octets)
, Le compilateur
enregistre automatiquement cette valeur en
mémoire sur 4 octets à partir d'une adresse qu'il choisit
lui-même en fonction des disponibilités : mettons 3EB8 pour
fixer les idées. Le pointeur sur x se note "&x", il contient :
Le
fait d'obtenir le pointeur d'une variable ou constante
"const" , s'appelle le référencement
de cette variable. Le pointeur
&v est une constante puisque l'adresse de stockage d'une variable
est définitivement attribuée par le compilateur et ne peut
plus être ultérieurement modifiée. Pointeurs
pointant d'autres pointeurs : On peut d'ailleurs répéter cette opération autant de fois que capacité de la mémoire le permet. En
fait, comme nous le verrons plus tard, cette opération n'est par
une vue de l'esprit : elle rend d'irremplaçables services. |
|
MANIPULER LES POINTEURS - Déréférencement
-
|
||||
|
Quelques exemples :
Remarques :
|
||||
|
Attention
: Exemple d'utilisation correcte d'un pointeur déclaré :
|
||||
|
Si
P est un pointeur sur la variable V, Cette
opération
s'appelle le déréférencement
du pointeur
A
ce titre, l'étoile * peut se lire : "valeur ou contenu
de la variable pointée par"
Commentaires
: Après compilation et lancement, affichage obtenu :
|
||||
|
La
suite va vous monter que le fait de pouvoir modifier ou lire une variable
par l'intermédiaire d'un pointeur |
||||
|
|