Le rôle joué par les pointeurs dans les programmes écrits en c++, est fondamental.

Même si vous avez l'habitude d'utiliser les pointeurs en c, consultez néanmoins cette page, car vous y trouverez des instructions propres au c++.

Par exemple les instructions this, new, delete et l'opérateur ->*, sont des instructions propres au langage c++

Je rappelle qu'une variable du type pointeur, contient une adresse. Les pointeurs pointent sur un type, et permettent d'accéder aux grandeurs par références et non par valeurs.

On déclare un pointeur en utilisant la syntaxe :

type * type_point ;

où type est un type reconnu, et où type_point est le nom que l'on donne à la variable du type pointeur.

On remarque que la déclaration d'un pointeur, est semblable à la déclaration d'une variable ordinaire, si ce n'est que l'on fait précéder son nom, par l'opérateur unaire d'indirection * (étoile)

On peut déclarer un pointeur à n'importe quel endroit du programme, contrairement au c, où les déclarations doivent être placées au début des fonctions. Par exemple :

cons char * c_pt ;

déclare un pointeur de chaîne de caractère constante.

On prendra l'habitude d'indiquer dans le nom d'une variable du type pointeur, un signe qui permette de se souvenir qu'il s'agit d'un pointeur. On écrira par exemple pvar, ou var_point ...

Si tvar est une variable du type t, et si t_point est un pointeur sur le type t, on fera pointer t_point sur tvar, en écrivant :

t_var = &tvar ;

En effet, l'opérateur unaire &, appliqué à une variable, donne l'adresse de cette variable.

Si t_point pointe sur un type qui est une valeur, on obtiendra la valeur située à l'adresse pointée par le pointeur, par l'opérateur unaire d'indirection * (étoile)

Par exemple si int ivar=12; et int *i_point=&ivar, alors : * i_point vaudra 12

Par contre, si t_point pointe sur une classe (ou sur une structure)

on ne peut pas utiliser l'indirection, car il faut préciser sur quel membre de la classe doit pointer t_point. Dans ce cas, on utilise l'opérateur -> (appelé opérateur flèche) La syntaxe est la suivante :

t_point->membre où membre est le nom d'un membre de la classe (ou de la structure)

Quand le membre est une méthode, le résultat est est celui de la fonction, qui opère sur l'objet pointé par le pointeur.

Ainsi, tvar.fon(...) est équivalent à :

t_point->fon() où t_point est un pointeur, qui pointe sur l'objet tvar de la classe t

Signalons les pointeurs du type void, qui ne pointent sur rien, que l'on peut utiliser comme des pointeurs généraux, qui seront utilisés pour pointer sur n'importe quel type.

Enfin on ne confondra pas un pointeur constant, avec un pointeur sur un type constant. Par exemple, une chaîne de caractère constante, contiendra une chaîne qui ne pourra pas être modifiée, tandis qu'un pointeur constant, contiendra une adresse qui ne pourra pas être modifiée, sans un message d'erreur du compilateur.

Vous remarquerez d'ailleurs, que le c++ est bien plus strict que le c, pour la reconnaissance des type, ce qui est nécessaire pour la notion de surcharge (voir cours 4 overload overread)

Le transtypage (de l'anglais casting) s'obtient en utilisant un nom de type, placé entre parenthèses, avant l'expression que l'on veut transcoder.

Par exemple, (char) ivar transforme la variable int ivar en char.

On obtiendra un message d'erreur, ou un warning, lors de la compilation, quand le transcodage est impossible, ou quand on risque une perte d'information.

codage.cpp : exemple de transtypage ou casting

Le pointeur this, est un pointeur déclaré implicitement, dans le corps des fonctions membres d'une classe, qui pointe sur l'objet de la classe.

Il permet de faciliter la programmation, en utilisant this->membre, où membre est un membre de la classe.

La programmation en c++, utilise systématiquement les pointeurs et l'opérateur -> (flèche) ainsi que les opérateurs new et delete, pour une optimisation de la gestion de la mémoire de pile.

Ces 2 opérateurs permettent de gérer la mémoire vive, comme on le fait en c, avec les fonctions comme malloc, alloc, realloc... Ces fonctions sont toujours portables en c++, mais je vous conseille d'utiliser les opérateurs new et delete, qui font partie du langage comme tout opérateur, ce qui optimise la vitesse d'exécution.

pointeur.cpp : exemple d'utilisation des pointeurs

Le cours suivant décrit les particularités des fonctions du c++, et donne des exemples de constructeurs et d'opérateurs surchargés.

suivant : cours 4 les fonctions

retour au sommaire du cours cpptutor