Gestion de risque
Travaux Dirigés No 6 Les Pointeurs
1. Répondre à ce qui suit : a. Un pointeur est une variable qui contient __________ de la valeur d'une autre variable. b. Les trois valeurs qui peuvent être employées pour initialiser un pointeur sont ___________, _________ et ________. c. Le seul nombre entier qui peut être assigné directement à un pointeur est le ___________. a) address. b) 0, NULL, an address. c) 0 2. Déterminer dans ce qui suit le vrai du faux. Si la réponse est fausse, expliquer pourquoi. a. L'opérateur d'adresse & peut être appliqué seulement aux constantes et aux expressions. b. Un pointeur qui est déclaré de type void * peut être déréférencé. a. Faux. L'opérande de l'opérateur d'adresse doit être une variable ; l'opérateur d'adresse ne peut pas être appliqué aux constantes ou aux expressions qui n'ont pas d'adresses en mémoire. b. Faux. Un pointeur pour void ne peut être déréférencé. Un tel pointeur n'a pas un type qui permet au compilateur de déterminer le nombre de bytes de mémoire pour déréférencer et le type des données vers lesquelles le pointeur pointe. 3. Soit l'état de la mémoire suivant : Variable i ... j k ... iptr ... jptr ... kptr Type int ... int int ... ... ... Adresse mémoire Valeur 000A ... 00A1 ? ... ... ... 20 ... 15 20 ... 000A ... 00A1 ... 00A5
int * 00C0 int * 00D0 int * 00E0
a. Donnez l’adresse de la variable k sachant qu’elle se situe juste après la variable j dans la mémoire et que la taille du type int est 4 bytes. b. Donnez la valeur de chacune des expressions suivantes : Expression i j &i (*kptr == i) i + *iptr *iptr + *jptr &iptr (*iptr == *kptr) (*iptr % *jptr) Solution : a. 00A5 b. 20 , 15 , 000A , true , 40 , 35 , 00C0 , true , 5 4. Soit le fragment de programme suivant : int i = 6; int j = i; int * iptr = &i; int * jptr = &j; int * kptr = &i; (*kptr)++; Après l’execution du fragment de programme précédent,