Bonjour à tous
J'ai été confronté récemment à une interrogation à propos de la nécessité du static. Le problème (réduit à son minimum) était le remplissage d'un tableau de pointeurs pris à partir d'un autre tableau.
Voici le code minimal (et compilable) d'illustration
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include <stdio.h> void remplir(char *tab[]) { static char *orig[]={"toto", "titi", "tata"}; for (int i=0; i < 3; i++) tab[i]=orig[i]; } int main() { char *tab[3]; remplir(tab); for (int i=0; i < 3; i++) printf("tab[%d]=%s\n", i, tab[i]); }
Je suis donc parti de l'idée que le tableau de remplissage (ici "orig") devait être static pour qu'il perdure au delà de la fonction et que les pointeurs copiés dans "tab" soient toujours valides même après avoir quitté la fonction.
Puis, j'ai été pris d'un doute. En effet, ce n'est pas "orig" qui importe, mais son contenu. Et ce contenu, lui, provient de la zone (je ne me souviens plus son nom) qui contient les strings écrites en dur, exactement comme quand on écrit char *nom="toto". Bref, ayant sauvegardé les adresses de ces 3 strings dans "tab", adresses qui, elles restent inaliénable, que "orig" reste ou disparaisse importe peu.
Voilà l'objet de mon questionnement. Le tableau "orig" nécessite-t-il de rester en static ou pas ? Accessoirement sans "static" ça compile et ça fonctionne aussi.
Merci à tous.
Partager