Passage de pointeurs aux fonctions
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 26 sur 63.
Maintenant que vous comprenez les limites du passage par valeur, explorons comment le passage de pointeurs aux fonctions résout ce problème. Au lieu de passer une copie de la valeur d'une variable, vous pouvez passer l'adresse mémoire de la variable à la fonction.
Lorsque vous passez un pointeur à une fonction, la fonction reçoit l'accès à l'emplacement de la variable d'origine en mémoire. Cela signifie que la fonction peut travailler directement avec les données d'origine, et non seulement une copie de celles-ci.
void processValue(int *ptr) {
// ptr contient l'adresse de la variable d'origine
// La fonction peut maintenant accéder à cet emplacement mémoire
}
int main() {
int x = 10;
processValue(&x); // Passer l'adresse de x
return 0;
}Remarquez comment nous utilisons l'opérateur d'adresse & lors de l'appel de la fonction pour passer l'adresse de la variable. Le paramètre de la fonction est déclaré comme int *ptr, indiquant qu'il s'attend à recevoir un pointeur vers un entier. Cette technique fondamentale ouvre des possibilités puissantes pour que les fonctions interagissent avec les données de votre programme.
Défi
FacileÉcrivez un programme C qui démontre le passage de pointeurs à des fonctions. Votre programme doit :
- Créer une fonction nommée
displayValuequi prend un pointeur vers un entier comme paramètre - À l'intérieur de la fonction
displayValue, utiliser l'opérateur de déréférencement pour accéder à la valeur à l'adresse mémoire et l'afficher au format :Value at address: [value] - Dans la fonction
main, déclarer une variable entière nomméenumberet l'initialiser avec la valeur 42 - Afficher la valeur d'origine au format :
Original value: [value] - Appeler la fonction
displayValueet passer l'adresse de la variablenumberen utilisant l'opérateur d'adresse - Après l'appel de la fonction, afficher un message de confirmation :
Function call completed
Votre sortie doit démontrer que la fonction reçoit et accède avec succès à l'adresse mémoire de la variable d'origine :
Original value: 42
Value at address: 42
Function call completedCe défi introduit le concept fondamental du passage de pointeurs aux fonctions, permettant à la fonction d'accéder à l'emplacement mémoire de la variable d'origine plutôt que de travailler avec une copie de sa valeur.
Aide-mémoire
Lors du passage de pointeurs à des fonctions, la fonction reçoit l'accès à l'emplacement mémoire de la variable d'origine au lieu d'une copie de sa valeur.
Utilisez l'opérateur d'adresse & pour passer l'adresse d'une variable à une fonction :
void processValue(int *ptr) {
// ptr contient l'adresse de la variable d'origine
// La fonction peut maintenant accéder à cet emplacement mémoire
}
int main() {
int x = 10;
processValue(&x); // Passe l'adresse de x
return 0;
}Le paramètre de la fonction est déclaré comme int *ptr pour indiquer qu'il s'attend à recevoir un pointeur vers un entier.
Essayez vous-même
#include <stdio.h>
// TODO: Écrivez votre fonction displayValue ici
int main() {
// TODO: Écrivez votre code ici
// 1. Déclarer et initialiser la variable number
// 2. Afficher la valeur d'origine
// 3. Appeler la fonction displayValue
// 4. Afficher le message de fin
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