Si le tableau statique est automatiquement libéré à la fin de l'exécution, comment pouvons-nous encore accéder correctement aux valeurs du tableau statique ?
Non, ce n'est pas ça. static
les variables sont initialisées avant de commencer main()
et sa durée de vie est la totalité de l'exécution du programme. Ils peuvent donc être return
à partir des fonctions (dans lesquelles ils sont définis) et sont toujours accessibles. Ils ne sont pas local (aux fonctions) qui disparaît lorsque la fonction termine son exécution.
Relié, citant C11
, chapitre §6.2.4
Un objet dont l'identifiant est déclaré sans le spécificateur de classe de stockage. _Thread_local
et soit avec un lien externe ou interne, soit avec le spécificateur de classe de stockage static
, a une durée de stockage statique. Sa durée de vie correspond à l'exécution complète du programme et sa valeur stockée n'est initialisée qu'une seule fois, avant le démarrage du programme.
En ce qui concerne le portée d'un static
à l'intérieur d'une fonction, oui, elle est limitée à la fonction elle-même, comme mentionné dans le chapitre §6.2.1,
[...] Si le déclarateur ou le spécificateur de type qui déclare l'identificateur apparaît à l'intérieur d'un bloc ou dans la liste de déclarations de paramètres dans une définition de fonction, l'identificateur a une portée de bloc, qui se termine à la fin du bloc associé. bloc associé. [...]
Cela signifie, évidemment, que vous ne pouvez pas utiliser le tableau a
à l'extérieur de subFunc()
comme a
n'est pas visible à l'extérieur de subFunc()
.
Cependant, lorsque vous return
le tableau (le retour d'un tableau entraîne une dégradation du pointeur vers le premier élément du tableau, pour info), car la durée de vie de l'objet static
est l'exécution entière du programme, l'accès au pointeur retourné (sûrement, dans les limites) est parfaitement valide et légal.