首頁
中文書目錄
原文書目錄
 站內快速搜尋
資源中心
Book Series
Special Interest













■好消息,歐萊禮書籍已重新鋪貨至各大書局及網路書店,歡迎讀者選購       ■歡迎各院校採用歐萊禮書籍,學校團購請洽校園服務團隊

[FAQ]

a question about C++

----- Original Message -----
From: Kuenhwa Chen
To: bookquestion@oreilly.com.tw
Sent: Monday, July 31, 2000 7:09 PM
Subject: a question about C++


您好
我有一個問題想請教您  如下

int    a[3]={1,2,3};  ------------(1)
char b[3]={'4','5','\0'};----------(2)
cout  <<    a  << ' ' <<   b  << endl;

結果是   0012FF74     45
                  (位址)       (值)

我的疑問是  (1)式  和 (2)式  的不同點在哪裡 ?
為什麼會造成這種結果 ?
關鍵是不是在char上 ?

煩請不吝賜教 謝謝


您好,
我看不出有何不對勁,我猜,您想問的是為什麼

        cout  <<    a  << ' ' <<   b  << endl;

的效果是這樣 :

            printf("%d %s\n",a,b) ;

而不是這樣 :
       
            printf("%d %d\n",a,b);

嗎?

如果這是您問的問題,我的回答是問題出在 cout 對不同型態的變數有不同的處理方式。
當 cout 遇到字串變數時( 此例中的 b ),會輸出字串內容,不然就印出變數本身的內容值。
因為 cout 本來就是用來輸出字串的 ( cout 不但可解釋成 Console OUTput,也可解釋成 Char OUTput) 。
    當 Compiler 遇到你那一行 cout 時,會將它最佳化成 cout << a << " 45\0\n" ;
這是因為  a 本身是  { 1,2,3 } 陣列的第一個元素之位址,而  "位址" 本身是一個正整數,
跟一般的 unsigned int 或  long 沒兩樣。雖然 b 也是,但  b 會被視為 "45" 字串的指標,
所以被印出來的是字串本身,不是 b 的位址。
這是您要的答案嗎?

Bill Lin Technical Editor


| 首頁 | 聯絡我們 |
© 2009, O'Reilly Media, Inc. Taiwan Branch