วันนี้ฉันสอนเพื่อนสองสามคนถึงวิธีใช้ C structs หนึ่งของพวกเขาถามว่าคุณจะกลับstructจากฟังก์ชั่นเพื่อที่ฉันตอบว่า: "ไม่มีคุณจะกลับตัวชี้ไปยังแบบไดนามิกmallocเอ็ดstructs. แทน"
มาจากคนที่ทำ 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;ล่ะ