आज मैं एक दो दोस्तों को सिखा रहा था कि कैसे सी का उपयोग करें struct
। उनमें से एक ने पूछा कि क्या आप struct
किसी फ़ंक्शन से लौट सकते हैं , जिसके लिए मैंने उत्तर दिया था: "नहीं! आप इसके बजाय गतिशील रूप से malloc
एड करने के लिए संकेत लौटाएंगे struct
।"
किसी ऐसे व्यक्ति से आ रहा है, जो मुख्य रूप से C ++ करता है, मैं उम्मीद कर रहा था कि मैं struct
मूल्यों के आधार पर वापसी नहीं कर पा रहा हूं । C ++ में आप operator =
अपनी वस्तुओं के लिए ओवरलोड कर सकते हैं और अपने ऑब्जेक्ट को मान द्वारा वापस करने के लिए एक फ़ंक्शन का पूरा अर्थ रखते हैं। सी में, हालांकि, आपके पास वह विकल्प नहीं है और इसलिए मुझे यह सोच कर मिला कि वास्तव में कंपाइलर क्या कर रहा है। निम्नलिखित को धयान मे रखते हुए:
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;
?