Académique Documents
Professionnel Documents
Culture Documents
AUX REFERENCES
Un pointeur est une variable qui contient l’adresse d’une variable. Une variable contient une
valeur spécifique. Un pointeur comme toute autre variable doit être défini avant d’être
utilisé.
type *nom-de-variable;
Exemple :
//cmptPtr peut être utilisé pour pointer sur une variable de type int
// xPtr et yPtr peuvent être utilisés pour pointer sur des variables de type float
Dans une déclaration, quand une variable est précédée de *, cette variable devient un
pointeur
pointeur peut être initialisé à zéro, à NULL ou une adresse. Un pointeur qui ne pointe à rien
Exemple :
ptr = &total;
ptr prend l’adresse mémoire de la variable total. Par exemple, si total a la valeur 5 et
placée à l’adresse 100, alors après l’affectation, ptr prend la valeur 100
val = *ptr;
Exemple
#include <iostream>
using namespace std;
int main()
{
int total;
int *ptr;
int val;
total = 3200;
ptr = &total;
cout<<"L’adresse de total : "<<ptr ;
cout<<"L’adresse de prt+1 :"
val = *ptr;
cout<<"Le total est:"<<val<<endl;
cout<<(*ptr+1) ;// ?
cout<<*(ptr+1) ;// ?
return 0 ;
}
D’ordinaire, un pointeur doit pointer sur une variable qui est de même type que le type du
pointeur.
Ex :
float floatvar = 98.6 ;
int* intPtr = &floatvar ; // Erreur
Mais il existe une exception à la règle : il s’agit de l’utilisation du pointeur de type void :
Ex :
// ptr peut pointer sur n’importe quel type de donnée
//void * ptr ;
#include <iostream>
using namespace std ;
int main()
{
int intvar;
float flotvar;
int * intptr;
float* floatptr;
void * voidptr;
intptr = &intvar; //OK
//intPtr = &floatvar;// erreur
//floatPtr= &floatvar;//OK
voidPtr = &intvar;
voidPtr = &floatvar;
return 0;
}
L’adresse placée dans le pointeur ne peut pas changer mais l’objet pointé peut
changer.
Ex :
int x = 0;
int *const cp = &x; //cp est une constante pointeur sur x
L’objet pointé ne peut pas être modifié, mais le pointeur peut être modifié pour
pointer sur quelque chose d’autre.
Ex :
int x=0;
const int *pc = &x;// pc est pointeur sur une constante
Le pointeur et l’objet pointé sont tous deux des constantes et par conséquent, aucun
des deux ne peut changer
Ex :
int x=0;
//cpc est une constante qui pointe sur une constante
const int *const cpc = &x;
Ex :
p est Une constante qui pointe sur Un objet de type int qui est une constante
Ex :
int x = 0;
#include <iostream>
int main()
cout<<*(intTab+j)<<endl;
return 0;
#include<iostream>
constintjours = 7;
intmain()
cout<<arrptrs[j]<<endl ;
6. Les références
A côté des pointeurs, les références sont une autre manière de manipuler les adresses des
objets placés dans la mémoire. Une référence est un pointeur géré de manière interne par la
machine. Une valeur de type référence est une adresse mais, hormis lors de son
l'adresse. Il en découle qu'il est obligatoire d'initialiser une référence lors de sa création.
Exemple :
int i;
Les références permettent de bénéficier d'un mécanisme d'alias sur les variables.
int main()
{
int val =10 ;
int i ;
int *pval = &val ; // Pointeur sur val
int &refVal = val ; // référence sur val
//int &refAutre ; // Erreur
*pval =12 ;
cout<< val ;
refVal++ ;
cout<<val ;
i = refVal ; // ‘i’ vaut 13, valeur de ‘val’
cout<< i ;
}
Syntaxe:
//pour allouer de la mémoire afin de contenir une variable de type t
p = new t
//allouer un tableau d’éléments de type t
p = new t [nombre_d_element]
Exemple:
int* bobby;
bobby = new int[5];
Dans ce cas, le système alloue dynamiquement de l’espace pour 5 éléments de type int et
retourne un pointeur sur le premier élément de type int.
On peut accéder au premier élément pointé par bobby en utilisant l’expression bobby[0] ou
l’expression *bobby.
Ces deux expressions sont équivalentes.
On peut accéder au deuxième élément par bobby[1] ou *(bobby+1), ainsi de suite.
Si la mémoire allouée n’est plus nécessaire, alors on peut la libérer. On utilise à cet effet les
instructions delete ou delete[]
delete p;//Pour le cas d’un élément singulier
delete[] p;//Pour les cas d’un tableau
a) cout << c ;
b) cout <<c[3] ;
c) cout << pc ;
d) cout << *(pc – 2) ;
e) cout << *pc – 2 ;