Exercice langage C: Introduction aux pointeurs
Rédigé par GC Team, Publié le 17 Mars 2012, Mise à jour le Samedi, 17 Décembre 2022 21:001. Le programme ci-dessous illustre le fonctionnement des pointeurs en affichant les différentes valeurs contenues dans les variables.
Lisez-le en essayant de le comprendre. Essayez de déduire quelles vont être les valeurs affichées par les instructions cout
.
#include
using namespace std;
int main(int argc, char **argv) {
int i = 9;
cout "Contenu de i: '" i "'" endl;
cout "Adresse de i: '" (unsigned int)&i "'" endl endl;
/* On declare un pointeur sur int et on lui
* affecte l'adresse de i. On dit que p
* pointe sur i. */
int *p = &i;
cout "Contenu de p: '" (unsigned int)p "'" endl;
cout "Adresse de p: '" (unsigned int)&p "'" endl;
cout "Contenu de la variable pointee par p: '" *p "'" endl endl;
// On affecte 10 a l'adresse pointee par p.
*p = 10;
cout "Contenu de la variable pointee par p: '" *p "'" endl;
cout "Contenu de i: '" i "'" endl;
// Partie a completer
// Fin de la partie a completer
return 0;
}
2. Recopiez le programme donné dans emacs, compilez-le et lancez-le. Est-ce que les résultats affichés correspondent à ce que vous aviez prévu au point précédent?
Remarque: les adresses en mémoire sont toujours affichées sous forme hexadécimale (base 16). Pour les voir sous forme décimale, il faut les convertir en unsigned int, comme dans l'exemple ci-dessus.
3. Complétez le programme en incrémentant la variable i
de 10 (i = i + 10
), sans avoir recours directement à la variable i
(utilisez un pointeur). Affichez ensuite la valeur de i
pour vérifier que l'opération s'est bien déroulée.
4. Déclarez un nouveau pointeur sur int
que vous nommerez q
. Faites pointer q
sur i
. A nouveau, faites-le sans utiliser directement la variable i
. Affichez le contenu du pointeur q
pour vérifier votre code.
5. Déclarez une variable f
de type float
. Initialisez-la à. Echangez ensuite son contenu avec celui de i
, sans avoir recours à la variable i
. Affichez les valeurs de i
et f
.
6. Déclarez une nouvelle variable j
de type int
que vous initialisez à 8. Faites pointer q
sur j
. Maintenant, échangez les valeurs de i
et j
sans utiliser ni i
, ni j
.
Affichez finalement les valeurs de i
et j
.
#include
using namespace std;
int main(int argc, char **argv) {
int i = 9;
cout "Contenu de i: '" i "'" endl;
cout "Adresse de i: '" (unsigned int)&i "'" endl endl;
/* On declare un pointeur sur int et on lui
* affecte l'adresse de i. On dit que p
* pointe sur i. */
int *p = &i;
cout "Contenu de p: '" (unsigned int)p "'" endl;
cout "Adresse de p: '" (unsigned int)&p "'" endl;
cout "Contenu de la variable pointee par p: '" *p "'" endl endl;
// On affecte 10 a l'adresse pointee par p.
*p = 10;
cout "Contenu de la variable pointee par p: '" *p "'" endl;
cout "Contenu de i: '" i "'" endl;
// Partie a completer
// 3. i incrementee de 10
cout "3." endl;
*p = *p + 10;
cout "Contenu de i: '" i "'" endl;
// 4. nouveau pointeur sur i
cout "4." endl;
int *q = p;
cout "Contenu de la variable pointee par q: '" *q "'" endl;
// 5. echange
cout "5." endl;
float f = 5;
int t = *p;
*p = int(f);
f = t;
cout "Contenu de i: '" i "'" endl;
cout "Contenu de f: '" f "'" endl;
// 6. echange (2)
cout "6." endl;
int j = 8;
q = &j;
int k = *q;
*q = *p;
*p = k;
cout "Contenu de i: '" i "'" endl;
cout "Contenu de j: '" j "'" endl;
// Fin de la partie a completer
return 0;
}