Pointeurs - Pointeurs Les pointeurs sont des variables...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
1 Pointeurs Les pointeurs sont des variables contenant des adresses. Ils permettent donc de faire de l'adressage indirect. Ainsi : int* px; déclare une variable px qui est un pointeur sur un entier. La variable pointée par px est notée *px. Inversement, pour une variable int x; on peut accéder à l'adresse de x par la notation &x. Ainsi, je peux écrire : px = &x; ou x = *px; Voici une autre manière d'écrire la fonction swap() qui échange deux entiers, cette fois-ci en passant par des pointeurs : swap(int* px, int* py) { int temp; // variable temporaire temp = *px; *px = *py; *py = temp; } et pour échanger deux paramètres on appellera : int a,b; swap(&a,&b); Attention : un des pièges les plus classiques en C++ est celui du pointeur non initialisé. Le fait d'avoir déclaré une variable de type pointeur ne suffit pas pour pouvoir déréférencer ce pointeur. Encore faut-il qu'il pointe sur une << case >> mémoire valide. Pour reprendre l'exemple précédent, si j'écris int* px; *px = 3; j'ai de très fortes chances d'avoir une erreur à l'exécution, puisque px ne désigne pas une adresse mémoire dans laquelle j'ai le droit d'écrire. Ce n'est qu'après avoir écrit par exemple px = &x; comme dans l'exemple ci-dessus que l'instruction *px = 3; devient valide. Les tableaux On déclare un tableau de la manière suivante : int a[10]; Il y a une très forte relation entre un pointeur et un tableau. Dans l'exemple précédent, a est en fait une constante de type adresse ; en effet, a est l'adresse du début du tableau. Par conséquent, on peut écrire les choses suivantes : int* pa, a[10]; pa = &a[0]; ou pa = a; Mais attention, il y a des différences dues au fait que a est une adresse constante alors que pa est une variable. Ainsi, on peut écrire
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
2 pa = a; mais il n'est pas valide d'écrire a = pa; Quand on veut passer un tableau en paramètre formel d'une fonction, il est équivalent d'écrire : void funct(int tab[]) ou void funct(int* tab) car dans les deux cas on passe une adresse. Remarque : comme en Java, les indices, qui correspondent à des déplacements, commencent toujours à 0. Voyons maintenant comment on peut utiliser cette équivalence entre pointeurs et tableaux pour parcourir un tableau sans recalculer systématiquement l'adresse du point courant. Le problème est de calculer la moyenne d'une matrice 200 × 200 d'entiers. int tab[200][200];
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

This note was uploaded on 03/31/2012 for the course IFT 1166 taught by Professor Antoniotavares during the Winter '12 term at Université de Montréal.

Page1 / 6

Pointeurs - Pointeurs Les pointeurs sont des variables...

This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online