Passage par valeur
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 25 sur 63.
Lorsque vous passez une variable à une fonction en C, la fonction reçoit une copie de la valeur de cette variable, et non la variable elle-même. Ce concept fondamental est appelé le passage par valeur.
Voici ce qui se passe : si vous avez une variable x avec la valeur 10 et que vous la passez à une fonction, la fonction reçoit sa propre copie distincte de cette valeur. Toute modification apportée par la fonction à cette copie n'affecte pas la variable d'origine dans la fonction appelante.
void tryToChange(int num) {
num = 99; // Ceci ne modifie que la copie
}
int main() {
int x = 10;
tryToChange(x);
// x vaut toujours 10, pas 99
return 0;
}Ce comportement protège vos données d'origine contre toute modification accidentelle par des fonctions. Cependant, cela signifie également que si vous voulez qu'une fonction modifie réellement la valeur d'une variable, le passage par valeur ne fonctionnera pas. Comprendre cette limitation est crucial à mesure que vous progressez pour en apprendre davantage sur les pointeurs et sur la façon dont ils peuvent résoudre ce problème.
Défi
FacileÉcrivez un programme en C qui démontre le concept de passage par valeur en tentant de modifier une variable à l'intérieur d'une fonction et en observant que la variable d'origine reste inchangée.
Votre programme doit :
- Créer une fonction nommée
tryToModifyqui prend un paramètre entier appelénumber - À l'intérieur de la fonction
tryToModify, ajouter 50 au paramètrenumber - À l'intérieur de la fonction
tryToModify, afficher la valeur modifiée au format :Inside function: [value] - Dans la fonction
main, déclarer une variable entière nomméeoriginalet l'initialiser avec la valeur 25 - Afficher la valeur d'origine avant d'appeler la fonction au format :
Before function call: [value] - Appeler la fonction
tryToModifyet passer la variableoriginalcomme argument - Après l'appel de la fonction, afficher à nouveau la valeur de
originalau format :After function call: [value]
Votre sortie devrait démontrer que la valeur de la variable d'origine reste inchangée malgré la modification à l'intérieur de la fonction :
Before function call: 25
Inside function: 75
After function call: 25Ce défi démontre le concept fondamental du passage par valeur en C, où les fonctions reçoivent des copies des variables plutôt que les variables elles-mêmes. Toute modification apportée au paramètre à l'intérieur de la fonction n'affecte pas la variable d'origine dans la fonction appelante.
Aide-mémoire
En C, les fonctions reçoivent une copie des valeurs des variables, et non les variables elles-mêmes. C'est ce qu'on appelle le passage par valeur.
Lorsque vous passez une variable à une fonction, toute modification effectuée à l'intérieur de la fonction n'affecte que la copie, laissant la variable d'origine inchangée :
void tryToChange(int num) {
num = 99; // Cela ne modifie que la copie
}
int main() {
int x = 10;
tryToChange(x);
// x vaut toujours 10, pas 99
return 0;
}Ce comportement protège vos données d'origine contre toute modification accidentelle par les fonctions, mais cela signifie que le passage par valeur ne fonctionnera pas si vous voulez qu'une fonction modifie réellement la valeur d'une variable.
Essayez vous-même
#include <stdio.h>
// TODO: Écrivez votre fonction tryToModify ici
int main() {
// TODO: Écrivez votre code ici
// 1. Déclarer et initialiser la variable d'origine
// 2. Afficher la valeur avant l'appel de la fonction
// 3. Appeler la fonction tryToModify
// 4. Afficher la valeur après l'appel de la fonction
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes