2014-12-30 4 views
5
struct first_struct 
{ 
    int a; 
    int b; 
}; 

struct second_struct 
{ 
    char d; 
    int e; 
}; 

struct second_struct second_ins = {'a',10}; 
struct first_struct first_ins = {20,12}; 



int main() 
{ 
    struct second_struct *pointer = &first_ins; 
    printf("%d\n",pointer->d); 
    return 0; 
} 

और मुझे 20 का आउटपुट मिलता है। असल में, मैं यह देखने की कोशिश कर रहा था कि यदि मैं एक संरचना सूचक घोषित करता हूं, और इसे किसी अन्य संरचना के उदाहरण पर इंगित करने का प्रयास करता हूं, तो परिणाम क्या होता है क्या मुझे मिलेगा। एक असंगत सूचक प्रकार के लिए कंपाइलर से चेतावनी के अलावा, यह बनाता है और ठीक चलाता है। मैं यह समझने की कोशिश कर रहा था कि इस ऑपरेशन को कंपाइलर द्वारा कैसे समझाया गया था। यह अनिर्धारित नहीं होना चाहिए, या यह हो सकता है और मैं परिणाम के साथ भाग्यशाली हो रहा हूं।विभिन्न संरचना उदाहरण को इंगित करने वाला सूचक सूचक

+1

'सूचक-> डी' बिल्कुल' * सूचक 'जैसा ही है क्योंकि यह संरचना में पहला तत्व है, इसलिए यह ठीक काम करता है। –

+0

द्वितीय_स्ट्रक्चर में पहला तत्व एक वर्ण है, और यह first_struct में एक पूर्णांक है। इसलिए, जब मैं% d मुद्रित करने का प्रयास कर रहा हूं तो शिकायत नहीं करनी चाहिए। मुझे लगता है कि मैं आपकी टिप्पणी को अच्छी तरह समझ नहीं पाया। –

+0

यहां तक ​​कि पॉइंटर-> ई ठीक काम करेगा। –

उत्तर

2

यह संभावना है कि दोनों structs एक ही तत्व के लिहाज से संरेखण है: sizeof(first_struct) == sizeof(second_struct) और: एक ही पर int e शुरू होता है struct में ऑफसेट के रूप में: int b

दूसरे शब्दों में, char d प्रभावी ढंग से करने के मामले में एक int के रूप में संग्रहीत किया जाता है लेआउट। यह आपके मंच पर बस एक भाग्यशाली संयोग है, और पोर्टेबल काम नहीं करेगा।

संबंधित मुद्दे