Passage des arguments par valeur/pointeur/référence
Glissez pour afficher le menu
Passage par valeur
Les variables créées à l'intérieur d'une fonction sont accessibles uniquement dans cette fonction. Cette règle s'applique également lors du passage des arguments. Les paramètres dans la signature de la fonction ont une portée locale et sont passés par valeur, ce qui signifie que leurs valeurs sont copiées dans la fonction et stockées dans des variables séparées (comme emprunter un livre à la bibliothèque au lieu de prendre l'original).
main.cpp
1234567891011121314151617181920#include <iostream> // Function that takes an argument by value void modify(int num) { // Modify the parameter (local copy of the argument) num = num * 2; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass 'number' by value modify(number); // Varibale in the main function remains unchanged std::cout << "After function call: " << number << std::endl; }
Passage par pointeur
Passer des arguments par valeur n'est pas toujours efficace. Copier les valeurs utilise de la mémoire supplémentaire, et parfois une fonction doit modifier directement la variable d'origine. Dans ces cas, il est préférable de passer la variable par pointeur, ce qui signifie envoyer son adresse mémoire au lieu de sa valeur. Cela se fait en utilisant l'opérateur de pointeur (*) dans les paramètres de la fonction.
main.cpp
1234567891011121314151617181920212223#include <iostream> // Function that takes an argument using pointer void modify(int* p_num) { // Modify the value at the memory address pointed by `p_num` // '*' is used to extract the value from the address (pointer) *p_num = (*p_num) * 2; std::cout << "Inside function: " << *p_num << std::endl; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass the address of 'number' using a pointer // '&' is used to get an address of the variable modify(&number); // 'number' in the main function is modified through the pointer std::cout << "After function call: " << number << std::endl; }
Passage par référence
Le passage par référence consiste à donner à une fonction un accès direct à la mémoire d'une variable, ce qui lui permet de modifier la valeur originale sans utiliser l'opérateur de déréférencement (*).
Le passage par référence utilise l'opérateur & dans les paramètres de la fonction. Il fonctionne de manière similaire au passage par pointeur, mais avec deux différences principales :
- Il n'est pas nécessaire d'utiliser
*pour accéder à la variable à l'intérieur de la fonction. - Il n'est pas nécessaire d'utiliser
&lors de l'appel de la fonction, uniquement dans sa déclaration.
main.cpp
1234567891011121314151617181920#include <iostream> // Function that takes an argument by reference void modify(int& num) { // Modify the parameter directly (no need for dereferencing) num = num * 2; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass `number` by reference modify(number); // `number` in the main function is modified directly through the reference std::cout << "After function call: " << number << std::endl; }
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion