Bugün birkaç arkadaşa C'lerin nasıl kullanılacağını öğretiyordum struct
. Onlardan biri, struct
yanıtladığım bir işlevden bir geri dönüp dönemeyeceğinizi sordu: "Hayır! Bunun yerine dinamik olarak malloc
ed struct
s'ye işaretçiler döndürürdünüz ."
Öncelikle C ++ yapan birinden geliyor, struct
değ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 return
ile birlikte ifade tam olarak ne =
yapıyor?
[değiştir]: Tamam, ben sadece struct b = a
bir 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 = a
gerç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;
?