« Programmation C++/Les fonctions » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 139 :
 
<source lang="cpp">
void passagePointeur (int *); // Prototype d'une fonction renvoyant void
// et prenant comme argument un pointeur vers un int
 
void passagePointeur (int * ptr) // Définition d'une fonction renvoyant void
// et prenant comme argument un pointeur vers un int appelé ptr
{
''...''
}
</source>
De même, il faut, lors de l'appel de fonction, non pas spécifier le nom de la variable comme lors d'un passage par valeur, mais son adresse. Pour ceci, il suffit de placer le signe & devant la variable.
 
<source lang="cpp">
int a = 5; // Initialisation d'une variable a, de valeur 5
passageValeur ( a ); // Appel d'une fonction par valeur
passagePointeur ( &a ); // Appel d'une fonction par pointeur
</source>
Notez donc le & devant la variable, ceci a pour effet de passer l'adresse mémoire de la variable.
Ligne 170 :
int b = 7;
 
cout << "a : " << a << "\nb : " << b; // Affiche les deux variables
 
passageValeur (a); // Appel de la fonction en passant la variable a par valeur
// Une copie de la valeur est transmise à la fonction
 
passagePointeur (&b); // Appel de la fonction en passant l'adresse de la variable b par pointeur
// Une copie de l'adresse est transmise à la fonction
 
cout << "\na : " << a << "\nb : " << b; // Réaffiche les deux variables
system ("PAUSE");
Ligne 187 :
{
int num = 100;
cout << "\n*ptr : " << *ptr; // Affiche la valeur pointée
 
* ptr = 9; // Change la valeur pointée;
 
ptr = &num; // <-- modification de l'adresse ignorée par la fonction appelante
}
 
Ligne 198 :
cout << "\nval : " << val;
 
val = 12; // <-- modification de la valeur ignorée par la fonction appelante
}
</source>
Ligne 205 :
Les avantages sont que cet appel nécessite moins de charge de travail pour la machine. En effet, par valeur, il faut faire une copie de l'objet, alors que par pointeur, seule l'adresse de l'objet est copiée. L'inconvénient, c'est qu'on peut accidentellement modifier dans la fonction appelée la valeur de la variable, ce qui se répercutera également dans la fonction appelante. La solution est simple : il suffit d'ajouter const dans le prototype de fonction de cette manière :
<source lang="cpp">
void passagePointeur (const int *);
// En d'autres termes, un pointeur vers un int constant
</source>
ainsi que la définition de fonction comme ceci :