C++

Appel C++ par adresse et appel par référence

Appel C++ par adresse et appel par référence

C++ est un langage de programmation polyvalent et flexible. Il a été créé à l'origine par Bjarne Stroustrup, un informaticien danois, en 1985. C++ prend en charge les méthodes de passage à trois paramètres, je.e., appel par valeur, appel par adresse et appel par référence. Dans cet article, nous allons discuter du mécanisme d'appel par adresse et d'appel par référence.

Qu'est-ce qu'une fonction?

Avant d'entrer dans le vif du sujet, nous devons comprendre quelle est la fonction en C++. Beaucoup d'entre vous connaissent peut-être déjà les fonctions.

Une fonction est essentiellement un morceau de code qui peut être utilisé pour effectuer une certaine tâche. Une fonction est principalement utilisée pour réduire le code répétitif dans un programme C++. Il prend l'entrée en tant que paramètres et renvoie la sortie en tant que valeur de retour. Si nous définissons la fonction une fois, nous pouvons l'appeler/l'utiliser plusieurs fois dans la dernière partie de notre programme. De cette façon, nous économisons beaucoup de code répétitif dans le programme.

Chaque programme C++ doit avoir la fonction "main()". La fonction "main()" est le point d'entrée d'un programme C++. En dehors de la fonction "main()", le programmeur peut définir autant de fonctions qu'il le souhaite.

Voici la syntaxe de définition d'une fonction :

Return_type Function_Name (Liste de paramètres d'entrée)

La fonction en C++ peut accepter 0 ou plus de paramètres d'entrée, alors qu'elle ne peut renvoyer qu'une seule valeur de retour.

Qu'est-ce que l'adresse?

Il existe deux types de variables en C++ (similaires au langage C) : la variable de données et la variable d'adresse. La variable d'adresse est utilisée pour stocker l'adresse d'une autre variable de données. Par exemple, considérons l'extrait de code suivant :

entier je = 100 ;
entier *ptr = &i;

Ici, la première instruction nous dit que la variable "i" est une variable de données et qu'elle stocke la valeur 100. Dans la deuxième instruction, nous déclarons une variable pointeur, i.e. "ptr", et l'initialiser avec l'adresse de la variable "i".

Qu'est-ce que la référence?

La référence est une autre fonctionnalité puissante du langage C++. Considérons l'extrait de code suivant :

un int = 200 ;
entier &r = a;

Dans cet exemple, nous avons déclaré un entier, i.e. "a" puis déclaré une variable de référence "r", qui est initialisée avec la valeur de "a". Ainsi, la variable de référence n'est rien d'autre qu'un alias d'une autre variable.

Méthodes de passage de paramètres :

Il existe trois types de méthodes de passage de paramètres en langage C++ :

  1. Appel par valeur / Passage par valeur
  2. Appel par adresse / Passage par adresse
  3. Appel par référence / Pass par référence

Dans cet article, nous discutons de - Appel par adresse et Appel par référence.

Qu'est-ce que l'appel par adresse/passage par adresse?

Dans le cas de la méthode Appel par adresse / Passage par adresse, les arguments de la fonction sont passés en adresse. La fonction appelante passe l'adresse des paramètres. Les variables de pointeur sont utilisées dans la définition de la fonction. A l'aide de la méthode Appel par adresse, la fonction peut accéder aux paramètres réels et les modifier. Nous verrons un exemple de la méthode d'appel par adresse plus loin dans la section de cet article.

Qu'est-ce que l'appel par référence / Pass par référence?

Dans la méthode Appel par référence / Passage par référence, les paramètres de la fonction sont passés en référence. A l'intérieur de la définition de la fonction, les paramètres réels sont accessibles à l'aide de la variable de référence.

Exemples:

Maintenant, puisque nous comprenons le concept des méthodes de passage de paramètres, nous allons voir plusieurs exemples de programmes pour comprendre le mécanisme de passage de paramètres en C++ :

  1. Exemple-1 - Appel par adresse (1)
  2. Exemple-2 - Appel par adresse (2)
  3. Exemple-3 - Appel par référence (1)
  4. Exemple-4 - Appel par référence (2)

Les deux premiers exemples sont donnés pour expliquer le fonctionnement de la méthode Call by address en C++. Les deux derniers exemples sont destinés à expliquer le concept d'appel par référence.

Exemple-1 - Appel par adresse (1)

Dans cet exemple, nous allons démontrer le mécanisme d'appel par adresse. A partir de la fonction "main()", nous appelons la fonction "hello()" et passons l'adresse de "var". Dans la définition de la fonction, nous recevons l'adresse de « var » dans une variable pointeur, i.e., "p". A l'intérieur de la fonction hello, la valeur de "var" est changée en 200 à l'aide du pointeur. Par conséquent, la valeur de "var" est modifiée en 200 dans la fonction "main()" après l'appel de la fonction "hello()".

#inclure
en utilisant l'espace de noms std ;
bonjour nul(int *p)

cout << endl << "Inside hello() function : " << endl;
cout << "Value of *p = " << *p << endl;
*p = 200 ;
cout << "Value of *p = " << *p << endl;
cout << "Exiting hello() function." << endl;

int main()

var int = 100 ;
cout << "Value of var inside main() function = " << var << endl;
bonjour(&var);
cout << endl << "Value of var inside main() function = " << var << endl;
renvoie 0 ;

Exemple-2 - Appel par adresse (2)

Ceci est un autre exemple de la méthode d'appel par adresse. Dans cet exemple, nous allons expliquer comment la méthode d'appel par adresse peut être utilisée pour résoudre un problème réel. Par exemple, nous voulons écrire une fonction pour échanger deux variables. Si nous utilisons le mécanisme d'appel par valeur pour échanger deux variables, les variables réelles ne sont pas échangées dans la fonction appelante. La méthode d'appel par adresse peut être utilisée dans un tel scénario. Dans cet exemple, nous passons l'adresse de var_1 (&var_1) et var_2 (&var_2) à la fonction "mySwap()". A l'intérieur de la fonction "mySwap()", nous échangeons les valeurs de ces deux variables à l'aide des pointeurs. Comme vous pouvez le voir dans la sortie ci-dessous, la valeur réelle de ces variables est échangée dans la fonction "main()" après l'exécution de la fonction "mySwap()".

#inclure
en utilisant l'espace de noms std ;
annuler monSwap(int *vptr_1, int *vptr_2)

int temp_var;
temp_var = *vptr_1;
*vptr_1 = *vptr_2;
*vptr_2 = temp_var;

int main()

int var_1 = 100 ;
int var_2 = 300 ;
cout << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
cout << "Calling mySwap() function - Call by address." << endl << endl;
monSwap(&var_1, &var_2);
cout << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
renvoie 0 ;

Exemple-3 - Appel par référence (1)

Dans cet exemple, nous allons montrer comment fonctionne l'appel par référence en C++. Dans la définition de la fonction "hello()", la valeur est reçue en tant que variable de référence (&p). A l'aide de la variable de référence (i.e., p), nous pouvons changer la valeur du paramètre actuel (var) à l'intérieur de la fonction "main()".

#inclure
en utilisant l'espace de noms std ;
void bonjour(int &p)

cout << endl << "Inside hello() function : " << endl;
cout << "Value of p = " << p << endl;
p = 200 ;
cout << "Value of p = " << p << endl;
cout << "Exiting hello() function." << endl;

int main()

var int = 100 ;
cout << "Value of var inside main() function = " << var << endl;
bonjour(var);
cout << endl << "Value of var inside main() function = " << var << endl;
renvoie 0 ;

Exemple-4 - Appel par référence(2)

Ceci est un autre exemple d'appel par référence. Dans cet exemple, nous allons montrer comment l'appel par référence fonctionne en C++ à l'aide d'un exemple concret. La fonction "mySwap()" est appelée à partir de la fonction "main()" avec les paramètres suivants - var_1 et var_2. A l'intérieur de la fonction "mySwap()", nous recevons les paramètres comme variables de référence.

#inclure
en utilisant l'espace de noms std ;
annuler monSwap(int &vref_1, int &vref_2)

int temp_var;
temp_var = vref_1;
vref_1 = vref_2 ;
vref_2 = temp_var;

int main()

int var_1 = 100 ;
int var_2 = 300 ;
cout << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
cout << "Calling mySwap() function - Call by reference." << endl << endl;
monSwap(var_1, var_2) ;
cout << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
renvoie 0 ;

Conclusion

Comprendre les méthodes de transmission de paramètres dans C++ est très crucial. Le langage de programmation C prend en charge l'appel par valeur et l'appel par adresse uniquement. Mais, C++ prend en charge l'appel par référence avec les deux mécanismes précédents. Dans cet article, nous avons vu plusieurs exemples de travail pour comprendre le concept d'appel par adresse et d'appel par référence. L'appel par adresse est une méthode très puissante et populaire dans les applications de domaine embarquées.

Meilleures applications de mappage de manette de jeu pour Linux
Si vous aimez jouer à des jeux sur Linux avec une manette de jeu au lieu d'un système de saisie clavier et souris typique, il existe des applications ...
Outils utiles pour les joueurs Linux
Si vous aimez jouer à des jeux sur Linux, il est probable que vous ayez utilisé des applications et des utilitaires comme Wine, Lutris et OBS Studio p...
Jeux HD remasterisés pour Linux qui n'ont jamais eu de version Linux plus tôt
De nombreux développeurs et éditeurs de jeux proposent une remasterisation HD d'anciens jeux pour prolonger la durée de vie de la franchise, veuillez ...