En primer lugar, para citar C11
, el capítulo §6.8.6.4, return
declaración, (el énfasis es mío )
Si return
se ejecuta una instrucción con una expresión, el valor de la expresión se devuelve al llamador como el valor de la expresión de llamada a la función.
Devolver una variable de estructura es posible (y correcto) porque se devuelve el valor de la estructura . Esto es similar a devolver cualquier tipo de datos primitivo (devolver int
, por ejemplo).
Por otro lado, si devuelve una matriz , al usar la return <array_name>
, esencialmente devuelve la dirección del primer elemento de la matriz NOTA , que se vuelve inválida en el llamador si la matriz era local a las funciones llamadas. Entonces, devolver la matriz de esa manera no es posible.
Entonces, TL; DR , no hay nada especial con struct
s, la especialidad está en las matrices .
NOTA:
Citando de C11
nuevo, el capítulo §6.3.2.1, ( énfasis mío )
Excepto cuando es el operando del sizeof
operador, el _Alignof
operador o el &
operador unario , o es un literal de cadena utilizado para inicializar una matriz, una expresión que tiene el tipo '' matriz de tipo '' se convierte en una expresión con el tipo '' pointer to type '' que apunta al elemento inicial del objeto de matriz y no es un lvalue. [...]
union
. ¿Qué tienen de especial los sindicatos?