Oggi stavo insegnando a un paio di amici come usare C structs. Uno di loro ha chiesto se si poteva restituire una structda una funzione, a cui ho risposto: "No! È piacerebbe tornare puntatori in modo dinamico malloced struct. S al posto"
Venendo da qualcuno che fa principalmente C ++, mi aspettavo di non essere in grado di restituire structi valori. In C ++ puoi sovraccaricare l'oggetto operator =per i tuoi oggetti e ha perfettamente senso avere una funzione per restituire l'oggetto in base al valore. In C, tuttavia, non hai questa opzione e quindi mi ha fatto pensare a cosa sta effettivamente facendo il compilatore. Considera quanto segue:
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;
}
Capisco perché struct b = a;non dovrebbe funzionare: non è possibile sovraccaricare operator =il tipo di dati. Com'è che si a = foo();compila bene? Significa qualcosa di diverso da struct b = a;? Forse la domanda da porsi è: che cosa fa esattamente la returndichiarazione congiunta per =firmare?
[modifica]: Ok, mi è stato appena indicato che struct b = aè un errore di sintassi: è corretto e sono un idiota! Ma questo lo rende ancora più complicato! L'uso struct MyObj b = afunziona davvero! Cosa mi sto perdendo qui?
struct MyObj b = a;sembra funzionare :)
struct b = a;è un errore di sintassi. E se ci provistruct MyObj b = a;?