討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
C++ 陣列及字元陣列問題
更改我的閱讀文章字型大小
作者 : cozykubo(cozy)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/14 下午 03:58:07
程式碼如下:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(void)
{
    int a[]={1,2,3};
    char b[]="abc";
    char c[][3]={"aa","bb","cc"};
    cout << "a=" << a <<endl;
    cout << "b=" << b <<endl;
    cout << "c=" << c <<endl;
system("pause");
return 0;
}

得到的結果為:
a=0x22ff60
b=abc
c=0x22ff40

我的問題在b陣列為什麼列印出來的不是位址呢?(陣列的名稱為其位址?)
作者 : smallwhite(小白)
[ 貼文 150 | 人氣 6678 | 評價 300 | 評價/貼文 2 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/14 下午 04:09:24
>我的問題在b陣列為什麼列印出來的不是位址呢?
理由很簡單,因為cout的定義(規格)就是如此,對於顯示一個char*時,就是顯示整個字串...
作者 : cozykubo(cozy)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/14 下午 07:36:08
真是如此!!
謝謝你的回覆
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/14 下午 09:32:08
>得到的結果為:
>a=0x22ff60
>b=abc
>c=0x22ff40
>
>我的問題在b陣列為什麼列印出來的不是位址呢?(陣列的名稱為其位址?)

這個句子
  cout << b;
有兩個值得注意的地方:

首先, 由於 #include <iostream> 的關係, 編譯器會把它轉換成函式呼叫:
  operator<<(cout, b);

所以即使 'b' 在原來的句子堿O個陣列, 在當做參數傳入函式時, 陣列會降格成指標.

第二點, 當所輸出的類型是個字元指標時, operator<< 的作者面臨兩個選擇: 輸出位址, 或輸出指標所指向的內容. 正如你所發現, 及smallwhite 大大所講的, 作者選擇了後者. 選擇後者的原因很簡單, 因為要正確的輸出 string literal, 如 cout << "some string".

對 operator<<() 函式來說, 不管 << 的右邊是 string literal, 或字元陣列, 函式所得到的都是字元指標.

作者 : cozykubo(cozy)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/15 上午 11:35:26
由於 #include <iostream> 的關係, 編譯器會把它轉換成函式呼叫:
  operator<<(cout, b);

關於operator () 我還不了解此函數的作用
所以要去查一下這個函數

作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/15 下午 08:42:35
>關於operator () 我還不了解此函數的作用
>所以要去查一下這個函數

那是 C++ 語言提供的 operator overloading:

http://www.devarticles.com/c/a/Cplusplus/Operator-Overloading-in-C-plus/

http://www.cs.caltech.edu/courses/cs11/material/cpp/donnie/cpp-ops.html

http://www.parashift.com/c++-faq-lite/operator-overloading.html

這裡有一些使用上的例子:

http://www.java2s.com/Tutorial/Cpp/0200__Operator-Overloading/Catalog0200__Operator-Overloading.htm

http://www.codeproject.com/KB/cpp/cfraction.aspx


 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.171875