Procédures et tableaux en paramètre
Les fonctions void qui agissent sans rien renvoyer, et le passage de tableaux et de chaînes.
Ce que tu vas apprendre
- Écrire une procédure (
void) qui affiche ou modifie - Passer un tableau et sa taille à une fonction
- Comprendre pourquoi une fonction peut modifier un tableau reçu
Les procédures
Une fonction de type void ne renvoie rien : on l'appelle pour ce qu'elle fait (afficher, modifier un tableau). Elle peut utiliser return; sans valeur pour s'arrêter plus tôt.
Passer un tableau
Un paramètre int t[] reçoit le tableau de l'appelant. Comme la fonction ne connaît pas sa taille, on la passe aussi : int somme(int t[], int n).
Contrairement aux variables simples, le tableau n'est pas copié : la fonction reçoit son adresse et travaille directement sur les cases de l'appelant. Elle peut donc le modifier.
Si la fonction ne doit pas modifier le tableau, on l'indique avec const : int somme(const int t[], int n).
Passer une chaîne
Une chaîne est un tableau de char terminé par '\0' : un paramètre const char s[] suffit, pas besoin de taille, car la fonction peut s'arrêter sur le '\0'.
Exemples commentés
1.Encadrer un mot
#include <stdio.h>
#include <string.h>
void bordure(int largeur) {
printf("+");
for (int i = 0; i < largeur; i++) {
printf("-");
}
printf("+\n");
}
void encadrer(const char mot[]) {
int n = (int) strlen(mot);
bordure(n + 2); // une procédure en appelle une autre
printf("| %s |\n", mot);
bordure(n + 2);
}
int main(void) {
char mot[50];
scanf("%49s", mot);
encadrer(mot);
return 0;
}Entrée
chat
Sortie
+------+ | chat | +------+
bordure est utilisée deux fois : écrire une fonction évite de répéter le même code.
2.Une fonction qui modifie un tableau
#include <stdio.h>
void doubler(int t[], int n) {
for (int i = 0; i < n; i++) {
t[i] = 2 * t[i]; // modifie le tableau de main
}
}
void afficher(const int t[], int n) {
for (int i = 0; i < n; i++) {
printf(i > 0 ? " %d" : "%d", t[i]);
}
printf("\n");
}
int main(void) {
int t[100], n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &t[i]);
}
doubler(t, n);
afficher(t, n);
return 0;
}Entrée
3 1 2 3
Sortie
2 4 6
doubler agit sur les cases du tableau de main. afficher promet avec const de ne rien modifier.
Chaque exemple est compilé et exécuté automatiquement pour garantir la sortie affichée.
Erreurs fréquentes
Calculer la taille avec sizeof dans la fonction
À éviter
int n = sizeof(t) / sizeof(t[0]);
À préférer
int somme(const int t[], int n)
Dans la fonction, t n'est qu'une adresse : sizeof(t) donne la taille d'une adresse, pas celle du tableau. Passe la taille en paramètre.
Renvoyer un tableau local
Un tableau déclaré dans une fonction disparaît à la fin de celle-ci. Pour produire un tableau, fais-le remplir par la fonction : l'appelant fournit le tableau en paramètre.
Entraîne-toi
6 questions variées pour fixer la leçon : choix, résultat à prévoir, ligne à compléter, code à remettre dans l'ordre, erreur à trouver.
À toi de jouer !
13 exercices pour mettre cette leçon en pratique, du plus simple au plus avancé.