2015-06-18 11 views
5

C++ अगर मैं इससी ++ struct स्मृति आवंटन

struct ComplexFloat { 
    float r; 
    float i; 
}; 

की तरह एक संरचना को परिभाषित करने और मैं दो चर इस

struct ComplexFloat cf; 
float *f=(float*)cf; 

की तरह घोषित मैं सुरक्षित रूप से मान सकते हैं कि निम्न स्थिति हमेशा सच हो जाएगा

(&(cf.r)==&(f[0]) && &(cf.i)==&(f[1])) 

?

दूसरे शब्दों में, क्या मैं सुरक्षित रूप से यह मान सकता हूं कि फ्लोट युक्त संरचना में, इसके तत्व स्मृति में संगत स्थिति पर कब्जा करेंगे और आदेश के अनुसार आदेश दिया जाएगा जिसमें वे संरचना की परिभाषा में प्रकट होते हैं?

मैंने परीक्षण किया और यह उबंटू पर जीसीसी 4.8.2 के मामले में है, मैं बस यह सुनिश्चित करना चाहता हूं कि यह हमेशा मान्य है।

+0

के बीच संरेखण पैडिंग हो सकती है कि अभिव्यक्ति संकलित भी नहीं होगी, 'सीएफ' एक सरणी या सूचक नहीं है। –

+0

यदि यह अकादमिक जिज्ञासा के लिए है, तो यह ठीक है लेकिन यदि यह उत्पादन कोड के लिए है, तो हो सकता है कि आप अपने डिज़ाइन पर पुनर्विचार करना चाहें। –

+0

धन्यवाद @ जोचिमपिलबोर्ग, मैंने – oromoiluig

उत्तर

2

नहीं, आप यह नहीं मान सकते कि मैं सही जगह पर रहूंगा जब तक कि आप संरचना में डेटा के संरेखण को नियंत्रित न करें। आर और i

+0

हालांकि वे एक ही क्रम में होना चाहिए –

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