C++ 關於陣列的問題 請幫忙>O<

困難的問題如下 ˋˊ

搞了好久 都還沒搞懂的東西

到底 字元陣列 跟一般陣列 插在哪裡!?

int main()

{

char *a="abc";

cout<<*a<<endl;

cout<<a<<endl;

}

裂印出來的結果

a

abc

請問 星號不是取直嗎?

如果 a 代表 &a[0]

*a 就相當於顯示 a陣裂的第一個直 也就是 a

那神奇的是 a 裂印出來 不是位置 卻是abc

感覺上 字元陣列 跟 一般的 陣裂 規則似乎不同?

卻又沒有人能給我 明確的分辨標準捏ˊˋ

Update:

請問 做了特殊的處理 是甚麼意思咧??

是說 cout<<*a;

慧等於 cout<

1 Answer

Rating
  • 其威
    Lv 7
    9 years ago
    Favorite Answer

    字元陣列跟一般陣列其實沒什麼不同。

    只是因為 C 裡面把「'\0' 結尾的字元陣列」當成字串來處理,所以 C++ 的 iostream 針對字元陣列(char *、wchar_t *)多做了一個操作。

    就是要輸出字元陣列的時候會一直輸出到看到 '\0' 為止、輸入字元陣列的時候會一直讀入到空白字元(例如 ' '、'\t'、'\r'、'\n'... 以及 locale 定義的空白字元),然後在後面補上 '\0'。

    你的疑問沒錯,cout << a; 應該是要印指標的。可是因為 c-string(全名是「NULL-terminated c-style char array」)太常用了,所以 C++ 中特別針對這個東西做了處理。

    2011-06-27 16:23:26 補充:

    char *a = "abcdefg";

    cout << *a;

    // *a 是一個 char,所以輸出一個字元。

    cout << a;

    // a 是 char *,本來應該要輸出指標位置。

    // 可是因為 char * 常被當成 c-string 使用,所以他特別針對 char *,會印到遇到 '\0' 為止。

Still have questions? Get your answers by asking now.