Zunächst, um zu zitieren C11
, Kapitel §6.8.6.4, return
Aussage, ( Hervorhebung von mir )
Wenn eine return
Anweisung mit einem Ausdruck ausgeführt wird, wird der Wert des Ausdrucks als Wert des Funktionsaufrufausdrucks an den Aufrufer zurückgegeben.
Die Rückgabe einer Strukturvariablen ist möglich (und korrekt), da der Strukturwert zurückgegeben wird. Dies ähnelt der Rückgabe eines primitiven Datentyps ( int
z. B. Rückgabe ).
Wenn Sie andererseits ein Array zurückgeben , indem Sie das verwenden return <array_name>
, wird im Wesentlichen die Adresse des ersten Elements des Arrays zurückgegeben. HINWEIS , das im Aufrufer ungültig wird, wenn das Array für die aufgerufenen Funktionen lokal war. Eine Rückgabe des Arrays auf diese Weise ist daher nicht möglich.
Also, TL; DR , es gibt nichts Besonderes mit struct
s, die Spezialität liegt in Arrays .
HINWEIS:
Nochmals zitieren C11
, Kapitel §6.3.2.1, ( meine Betonung )
Außer wenn es der Operanden des IS - sizeof
Operators, die _Alignof
Bedienungsperson oder den unären &
Operators oder ein Stringliteral verwendet , um einen Array zu initialisieren, ein Ausdruck, den Typen hat ‚‘ Array vom Typ ‚‘ umgewandelt wird , in einen Ausdruck mit Typ ‚‘ Zeiger auf Typ '' , der auf das Anfangselement des Array-Objekts zeigt und kein l-Wert ist. [...]
union
. Was ist das Besondere an Gewerkschaften?