cours c++ IGI fsts
Adresse et valeur d’ objet un On appelle Lvalue (left value) tout objet pouvant être placé à gauche d’ opérateur d’ un a¤ectation. Une Lvalue est caractérisée par :
– son adresse, c’ est-à-dire l’ adresse-mémoire à partir de laquelle l’ objet est stocké ;
– sa valeur, c’ est-à-dire ce qui est stocké à cette adresse.
(Institute)
01/02
16 / 46
Dans l’ exemple, int i, j; i = 3; j = i;
Si le compilateur a placé la variable i à l’ adresse 4831836000 en mémoire, et la variable j à l’ adresse 4831836004, on a objet i j (Institute)
adresse
4831836000
4831836004
valeur
3
3
01/02
17 / 46
Deux variables di¤érentes ont des adresses di¤érentes. L’ a¤ectation i = j; n’ opère que sur les valeurs des variables. Les variables i et j étant de type int, elles sont stockées sur 4 octets.
Ainsi la valeur de i est stockée sur les octets d’ adresse 4831836000 à
4831836003.
L’ adresse d’ objet étant un numéro d’ un octet en mémoire, il s’ agit d’ un entier quelque soit le type de l’ objet considéré. Le format interne de cet entier (16 bits, 32 bits ou 64 bits) dépend des architectures.
L’
opérateur & permet d’ accéder à l’ adresse d’ une variable. Toutefois &i n’ pas une Lvalue mais une constante : on ne peut pas faire …gurer &i à est gauche d’ opérateur d’ un a¤ectation.
Pour pouvoir manipuler des adresses, on doit donc recourir un nouveau type d’ objets, les pointeurs.
(Institute)
01/02
18 / 46
Un pointeur est un objet (Lvalue) dont la valeur est égale à l’ adresse d’ un autre objet. On déclare un pointeur par l’ instruction : type *nom-du-pointeur; où type est le type de l’ objet pointé. Cette déclaration déclare un identi…cateur, nom-du-pointeur, associé à un objet dont la valeur est l’ adresse d’ autre objet de type type. L’ un identi…cateur nom-du-pointeur est donc en quelque sorte un identi…cateur d’ adresse. Comme pour n’ importe quelle Lvalue, sa