Tout d'abord, pour citer C11
, chapitre §6.8.6.4, return
déclaration, ( c'est moi qui souligne )
Si un return
avec une expression est exécutée, l'instruction la valeur de l'expression est retournée à l'appelant en tant que valeur de l'expression d'appel de fonction.
Renvoyer une variable de structure est possible (et correct), car la structure valeur est renvoyé. Ceci est similaire au retour de n'importe quel type de données primitives (retour de int
par exemple).
D'autre part, si vous renvoyez un tableau en utilisant le return <array_name>
il renvoie essentiellement le adresse du premier élément du tableau NOTE ce qui devient invalide pour l'appelant si le tableau était local aux fonctions appelées. Donc, retourner un tableau de cette manière n'est pas possible.
Donc, TL;DR il n'y a rien spécial avec struct
la spécialité est dans tableaux .
NOTE :
Citation : C11
à nouveau, chapitre §6.3.2.1, ( mon accent )
Sauf lorsqu'il s'agit de l'opérande de la fonction sizeof
l'opérateur, le _Alignof
ou l'opérateur unaire &
ou est une chaîne littérale utilisée pour initialiser un tableau, une expression qui a type ''tableau de type'' est converti en une expression de type ''pointeur vers le type'' qui pointe vers l'élément initial de l'objet tableau et n'est pas une lvalue. [...]