วันนี้ฉันสอนเพื่อนสองสามคนถึงวิธีใช้ C struct
s หนึ่งของพวกเขาถามว่าคุณจะกลับstruct
จากฟังก์ชั่นเพื่อที่ฉันตอบว่า: "ไม่มีคุณจะกลับตัวชี้ไปยังแบบไดนามิกmalloc
เอ็ดstruct
s. แทน"
มาจากคนที่ทำ C ++ เป็นหลักฉันคาดหวังว่าจะไม่สามารถคืนstruct
ค่า s ใน C ++ คุณสามารถโอเวอร์โหลดoperator =
วัตถุของคุณและทำให้มีฟังก์ชั่นที่จะคืนค่าวัตถุของคุณโดยสมบูรณ์ อย่างไรก็ตามใน C คุณไม่มีทางเลือกนั้นและทำให้ฉันคิดว่าตัวแปลกำลังทำอะไรอยู่ พิจารณาสิ่งต่อไปนี้:
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;
}
ฉันเข้าใจว่าทำไมstruct b = a;
ไม่ทำงาน - คุณไม่สามารถโหลดoperator =
ประเภทข้อมูลของคุณได้มากเกินไป มันa = foo();
คอมไพล์แล้วดียังไง? ไม่ได้หมายถึงสิ่งอื่น ๆ กว่าstruct b = a;
? บางทีคำถามที่ต้องถามคือ: อะไรที่คำว่าreturn
ร่วมในการ=
ลงนามทำอะไร?
[แก้ไข]: โอเคฉันเพิ่งถูกชี้ว่าstruct b = a
เป็นข้อผิดพลาดทางไวยากรณ์ - ถูกต้องและฉันเป็นคนงี่เง่า! แต่นั่นทำให้มันซับซ้อนยิ่งขึ้น! ใช้struct MyObj b = a
งานได้แน่นอน! ฉันหายไปนี่อะไร
struct MyObj b = a;
ดูเหมือนจะทำงาน :)
struct b = a;
เป็นข้อผิดพลาดทางไวยากรณ์ ถ้าคุณลองทำstruct MyObj b = a;
ล่ะ