Fonctions et passage de paramètres en C et C++
Dans cette leçon, vous allez comparer trois façons de passer des paramètres à une fonction : par valeur, par pointeur et par référence.
Introduction
Par défaut, quand on passe une variable à une fonction, C et C++ en créent une copie, les modifications faites dans la fonction n'affectent donc pas la variable d'origine. Si la fonction doit pouvoir modifier l'original, l'appelant doit l'autoriser explicitement, avec un pointeur en C ou une référence en C++.
Points importants
- Activez les avertissements du compilateur (compiler warnings) et corrigez-les tous.
- Comprenez bien le type et la durée de vie (lifetime) de chaque valeur.
- Vérifiez toujours les données d'entrée et les limites des indices de tableau.
Exemples de code C et C++
#include <stdio.h>
void swap_ints(int *left, int *right) {
int temporary = *left;
*left = *right;
*right = temporary;
}
int main(void) {
int a = 4, b = 9;
swap_ints(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
9 4
#include <iostream>
void swap_ints(int& left, int& right) {
int temporary = left;
left = right;
right = temporary;
}
int main() {
int a = 4, b = 9;
swap_ints(a, b);
std::cout << a << ' ' << b << '\n';
}
9 4
Comparaison entre C et C++
En C, la fonction swap_ints reçoit l'adresse des deux variables et utilise l'opérateur * pour y accéder et échanger leurs valeurs. En C++, une référence (reference) agit comme un autre nom de la variable d'origine, la syntaxe est donc plus courte tout en modifiant bien la valeur. Le mot-clé const sur un paramètre indique que la fonction lit les données sans les modifier.
C utilise de petites fonctions procédurales et montre ouvertement comment les données sont représentées en mémoire.
C++ permet toujours de travailler à bas niveau, mais ajoute des types de bibliothèque et des abstractions plus sûres.
Exercices d'approfondissement
Exécutez les deux versions, puis modifiez le code pour observer la différence de sécurité qu'apporte chaque langage.
- Testez des entrées invalides et des valeurs limites.
- Compilez avec les options -Wall -Wextra -Wpedantic pour activer davantage d'avertissements.
- Placez les déclarations communes dans un fichier d'en-tête et l'implémentation dans un fichier séparé.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
- Distance entre deux points Calculez la distance en ligne droite entre deux points. Facile
- Days in a Month Return how many days a month has, including leap years. Facile