Aujourd'hui, j'enseigne à un couple d'amis comment utiliser C struct
s. L'un d'eux a demandé si vous pouviez retourner un struct
à partir d'une fonction, à laquelle j'ai répondu: "Non! Vous souhaitez renvoyer les pointeurs dynamiquement malloc
ed struct
s à la place."
Venant de quelqu'un qui d'abord est-ce que C++, je m'attendais à ne pas être en mesure de revenir struct
s par des valeurs. En C++, vous pouvez surcharger la operator =
pour vos objets et prend tout son sens à une fonction pour retourner votre objet par valeur. En C, cependant, vous n'avez pas cette option et donc il m'a fait penser que le compilateur est en train de faire. Considérez les points suivants:
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;
}
Je comprends pourquoi struct b = a;
ne devraient pas travailler -- vous ne pouvez pas surcharger operator =
pour le type de données. Comment est-ce que a = foo();
compile bien? Signifie-t-il autre chose que l' struct b = a;
? Peut-être que la question à se poser est: qu'est-Ce exactement ne l' return
déclaration dans le cadre de =
signe?
[edit]: Ok, je viens de relever struct b = a
est une erreur de syntaxe -- c'est exact, et je suis un idiot! Mais qui le rend encore plus compliqué!!! À l'aide de struct MyObj b = a
fonctionne en effet! Ce qui me manque ici?