2013-06-13 6 views
6

u6.c के लिए मेरा अपेक्षित आउटपुट एबीसी था लेकिन यहां मुझे सीबीए मिला है ऐसा क्यों है? क्या आप विस्तृत स्पष्टीकरण के साथ इस पर कुछ प्रकाश डाल सकते हैं?यह रिवर्स स्ट्रिंग प्रिंट क्यों कर रहा है?

union mediatech 
{ 
int i; 
char c[5]; 
}; 

int main(){ 
mediatech u1 = {2};    // 1 
mediatech u2 = {'a'};    // 2 
mediatech u3 = {2.0};    // 3 
mediatech u6 = {'ABC'};   // 6 

cout<<"\nu6.i = "<<u6.i<<" u6.c="<<u6.c; // o/p: u6.i=4276803 u6.c=CBA 
} 
+0

संबंधित: http://stackoverflow.com/a/7459943/24913 –

+0

ध्यान दें कि कड़ाई से यह अपरिभाषित व्यवहार है। आपके कोउट कथन में आप एक यूनियन सदस्य से पढ़ रहे हैं जो कि हाल ही में लिखा गया था। –

उत्तर

5

http://en.wikipedia.org/wiki/Little_endian#Little-endian

आप शायद 86 आर्किटेक्चर :), जो थोड़ा-endian है साथ प्रोसेसर का उपयोग करें।

इसका मतलब है कि जब आप चार सरणी में वर्ण निर्दिष्ट करते हैं तो वे उसी क्रम में स्मृति पर जाते हैं, लेकिन जब आप उस स्मृति को पूर्णांक के रूप में पढ़ते हैं, तो यह प्रोसेसर को रिवर्स ऑर्डर में पंजीकृत करता है।

संपादित

क्षमा करें, एक ही है, लेकिन उलटे क्रम में, आप के साथ 'एबीसी' बहु चरित्र शाब्दिक है, जो प्रोसेसर रजिस्टर से उलटे क्रम में स्मृति और के रूप में चार सरणी के लिए चला जाता पूर्णांक प्रारंभ यह "हो जाता है CBA "

14

आप एक बहु चरित्र शाब्दिक 'ABC' उपयोग कर रहे हैं एक int प्रारंभ करने में।

बहु-चरित्र शाब्दिक (जो '' का उपयोग करने का एक असामान्य तरीका है) का अर्थ है कार्यान्वयन-परिभाषित है। विशेष रूप से, int व्याख्या में व्यक्तिगत वर्णों का क्रम कार्यान्वयन-परिभाषित है।

'ABC' में वर्णों के क्रम के संदर्भ में यह प्रोग्राम भविष्यवाणी करने के लिए कोई पोर्टेबल (यानी कार्यान्वयन-स्वतंत्र) तरीका नहीं है।

मानक (सी ++ 11, §2.14.3/1) से:

[...] एक multicharacter शाब्दिक टाइप int और कार्यान्वयन से परिभाषित मूल्य है।

+1

क्या मैं सुझाव दे सकता हूं कि बहु-चरित्र अक्षर गैर मानक के बजाय "असामान्य" हैं। आखिरकार, आप मानक के उस हिस्से को उद्धृत करते हैं जो उन्हें वर्णित करता है ... –

+0

@KazDragon बहुत सच है। संपादित। – jogojapan

+2

@jogojapan: +1 इस शाब्दिक प्रकार के बारे में कभी नहीं जानता था, धन्यवाद :) – legends2k

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