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

C ++ Appel par adresse et appel par référence
C ++ est un langage de programmation à usage général 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, i.e., appel par valeur, appel par adresse et appel par référence. Dans cet article, nous allons discuter de l'appel par adresse et appel par mécanisme de référence.

Qu'est-ce qu'une fonction?

Avant de sauter dans le sujet réel, 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'elle le souhaite.

Voici la syntaxe de définir une fonction:

Return_type function_name (liste de paramètres d'entrée)

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

Qu'est-ce que l'adresse?

Il existe deux types de variables dans C ++ (similaire à la langue C) - variable de données et variable d'adressage. 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:

int i = 100;
int * ptr = & i;

Ici, la première instruction nous indique que la variable «i» est une variable de données, et qu'elle stockait la valeur 100. Dans la deuxième instruction, nous déclarons une variable de pointeur, je.e. «PTR» et l'initialisant avec l'adresse de la variable «I».

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

La référence est une autre caractéristique puissante de la langue C ++. Prenons l'extrait de code suivant:

int a = 200;
int & r = a;

Dans cet exemple, nous avons déclaré un entier, je.e. «A» puis a 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 des paramètres:

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

  1. Appel par valeur / pass par valeur
  2. Appelez par adresse / passage par adresse
  3. Appel par référence / passe par référence

Dans cet article, nous discutons de l'appel par adresse et appel par référence.

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

Dans le cas de l'appel par l'adresse / passer par la méthode d'adresse, les arguments de fonction sont passés comme l'adresse. La fonction de l'appelant passe l'adresse des paramètres. Les variables du pointeur sont utilisées dans la définition de la fonction. À l'aide de la méthode d'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 l'adresse ultérieure de la section de cet article.

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

Dans l'appel par référence / passez par méthode de référence, les paramètres de fonction sont passés comme référence. À 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 de méthodes de passage des paramètres, nous verrons plusieurs exemples de programmes pour comprendre le mécanisme de passage des 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 comment fonctionne la méthode d'appel par adresse en C++. Les deux derniers exemples sont d'expliquer l'appel par concept de référence.

Exemple-1 - Appel par adresse (1)

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

#inclure
Utilisation de Namespace Std;
void bonjour (int * p)

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

int main()

int var = 100;
couter << "Value of var inside main() function = " << var << endl;
Bonjour (& var);
couter << endl << "Value of var inside main() function = " << var << endl;
retour 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 de l'appelant. 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 ()». À 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
Utilisation de Namespace Std;
void MySwap (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;
couter << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
couter << "Before calling mySwap() function, value of var_2 : " << var_2 << endl;
couter << "Calling mySwap() function - Call by address." << endl;
MySwap (& var_1, & var_2);
couter << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
couter << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
retour 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). À l'aide de la variable de référence (i.e., P), nous sommes en mesure de modifier la valeur du paramètre réel (var) à l'intérieur de la fonction «main ()».

#inclure
Utilisation de Namespace Std;
void bonjour (int & p)

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

int main()

int var = 100;
couter << "Value of var inside main() function = " << var << endl;
Bonjour (var);
couter << endl << "Value of var inside main() function = " << var << endl;
retour 0;

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

Ceci est un autre exemple d'un 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 réel du monde. La fonction «MySwap ()» est appelée à partir de la fonction «main ()» avec les paramètres suivants - var_1 et var_2. À l'intérieur de la fonction «MySwap ()», nous recevons les paramètres en tant que variables de référence.

#inclure
Utilisation de Namespace Std;
void MySwap (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;
couter << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
couter << "Before calling mySwap() function, value of var_2 : " << var_2 << endl;
couter << "Calling mySwap() function - Call by reference." << endl;
MySwap (var_1, var_2);
couter << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
couter << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
retour 0;

Conclusion

Comprendre les méthodes de passage des paramètres en 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 appel par référence. L'appel par l'adresse est une méthode très puissante et populaire dans les applications de domaine intégrées.