2013-06-13 171 views
6

我對u6.c的期望輸出是ABC,但在這裏我得到了CBA爲什麼這樣呢?請詳細解釋一下這個問題嗎?爲什麼打印反向字符串?

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

請注意嚴格地說這是未定義的行爲。在你的cout聲明中,你是從一個工會成員那裏讀到的,這個工會成員並不是最近寫給他的成員。 –

回答

5

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

你可能使用與x86架構:),這是小端處理器。

這意味着,當您將字符分配給字符數組時,它們以相同的順序進入內存,但是當您將該內存作爲整數讀取時,它會以相反的順序進入處理器寄存器。

編輯

對不起,相同的,但以相反的順序,則初始化「ABC」多字符的文本,這從處理器寄存器變爲相反的順序存儲和作爲字符數組整數它變成「CBA 「

14

您使用的是多字符文字'ABC'來初始化int

如何解釋多字符文字(這是一種罕見的使用''的方式)是實現定義的。具體來說,int解釋中單個字符的順序是實現定義的。

'ABC'中沒有便攜式(即獨立於實現)的方式來預測該程序將按照字符的順序執行的操作。

從標準(C++ 11,§2.14.3/ 1):

[...]甲多字符文字的類型爲int和實現定義的值。

+1

我可以建議多字符文字是「不尋常的」而不是非標準的。畢竟,你引用了描述它們的標準部分...... –

+0

@KazDragon非常真實。編輯。 – jogojapan

+2

@jogojapan:+1從來不知道這種字面類型,謝謝:) – legends2k

相關問題