Bugün birkaç arkadaşa C'lerin nasıl kullanılacağını öğretiyordum struct. Onlardan biri, structyanıtladığım bir işlevden bir geri dönüp dönemeyeceğinizi sordu: "Hayır! Bunun yerine dinamik olarak malloced structs'ye işaretçiler döndürürdünüz ."
Öncelikle C ++ yapan birinden geliyor, structdeğerlerle s döndüremediğini bekliyordum . C ++ 'da operator =nesneleriniz için aşırı yükleyebilirsiniz ve nesnenizi değere göre döndürecek bir işleve sahip olmak tam mantıklıdır. Bununla birlikte, C'de bu seçeneğe sahip değilsiniz ve bu yüzden derleyicinin gerçekte ne yaptığını düşünmemi sağladı. Aşağıdakileri göz önünde bulundur:
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;
}
Neden struct b = a;işe yaramayacağını anlıyorum - operator =veri türünüz için aşırı yükleme yapamazsınız . Nasıl a = foo();derlenir? Bunun dışında bir şey mi ifade ediyor struct b = a;? Belki de sorulması gereken soru şudur: İmzalama returnile birlikte ifade tam olarak ne =yapıyor?
[değiştir]: Tamam, ben sadece struct b = abir sözdizimi hatası olduğunu işaret ettim - bu doğru ve ben bir aptalım! Ama bu onu daha da karmaşık hale getiriyor! Kullanmak struct MyObj b = agerçekten işe yarıyor! Burada ne eksik?
struct MyObj b = a;işe yarıyor gibi görünüyor :)
struct b = a;bir sözdizimi hatasıdır. Ya denersenstruct MyObj b = a;?