मैंने पढ़ा है कि अगर आप इस तरह दो structs की घोषणा:क्या यह कोड सी मानक द्वारा गारंटी है?
struct Node {
int a, b, c;
};
struct DerivedNode {
struct Node base;
int d, e, f;
};
तो फिर तुम संकेत उन्हें इस तरह का उपयोग कर सकते हैं:
struct DerivedNode myDerivedNode;
struct Node *regularNode = (struct Node *) &myDerivedNode;
regularNode->a = 3;
दूसरे शब्दों में, a, b, c
के लिए पता ऑफसेट ही कर रहे हैं struct Node
और struct DerivedNode
के भीतर। तो आप इसके बारे में एक तरह का बहुरूपता प्राप्त कर सकते हैं, जहां आप जबरन (struct Node *)
-डेरिवडेड पॉइंटर को पास कर सकते हैं जहां भी नोड पॉइंटर सामान्य रूप से लिया जाएगा।
मेरा सवाल यह है कि क्या इस व्यवहार की गारंटी है। मुझे पता है कि कुछ अजीब स्मृति संरेखण के मुद्दे हैं और संकलक कभी-कभी मेमोरी में बेहतर पैकिंग प्राप्त करने के लिए फ़ील्ड को पीछे छोड़ देता है। क्या base
फ़ील्ड कहीं भी स्थित होगा लेकिन struct DerivedNode
की शुरुआत होगी?
आप कई स्थानों पर 'struct' कीवर्ड भूल गए हैं, नहीं? –
@ जेन्स ओह हाँ शायद। क्षमा करें –