Heute habe ich ein paar Freunden beigebracht, wie man C structs benutzt. Einer von ihnen fragte, ob Sie structeine Funktion von einer Funktion zurückgeben könnten , auf die ich antwortete: "Nein! Sie würden stattdessen Zeiger auf dynamisch malloced structs zurückgeben."
Ich kam von jemandem, der hauptsächlich C ++ macht, und hatte erwartet, dass er structs nicht nach Werten zurückgeben kann. In C ++ können Sie die operator =für Ihre Objekte überladen und es ist absolut sinnvoll, eine Funktion zu haben, um Ihr Objekt nach Wert zurückzugeben. In C haben Sie diese Option jedoch nicht und ich habe darüber nachgedacht, was der Compiler tatsächlich tut. Folgendes berücksichtigen:
struct MyObj{
double x, y;
};
struct MyObj foo(){
struct MyObj a;
a.x = 10;
a.y = 10;
return a;
}
int main () {
struct MyObj a;
a = foo(); // This DOES work
struct b = a; // This does not work
return 0;
}
Ich verstehe, warum struct b = a;sollte nicht funktionieren - Sie können nicht operator =für Ihren Datentyp überladen . Wie ist es, dass gut a = foo();kompiliert? Bedeutet es etwas anderes als struct b = a;? Vielleicht lautet die Frage: Was genau macht die returnAussage in Verbindung mit dem =Unterschreiben?
[bearbeiten]: Ok, ich wurde nur darauf hingewiesen, dass struct b = aes sich um einen Syntaxfehler handelt - das ist richtig und ich bin ein Idiot! Das macht es aber noch komplizierter! Verwenden struct MyObj b = afunktioniert in der Tat! Was fehlt mir hier?
struct MyObj b = a;scheint es jedoch zu funktionieren :)
struct b = a;ist ein Syntaxfehler. Was ist, wenn Sie es versuchenstruct MyObj b = a;?