C 指標困惑,為什麼char p cout 直接輸出了整個char 而不是輸出首個位址?

時間 2021-06-06 20:27:47

1樓:曹恆

那個輸出流運算子被過載過,這樣更加方便輸出字串,因為字串比較特殊,用0結尾,所以這樣的過載可行,輸出到記憶體為0的地方就可以,但是普通陣列沒有這樣的特性所以不過載,直接輸出位址

2樓:573xmcgcg

std::cout 的型別 std::ostream 的基類 std::basic_ostream 有乙個這樣的 operator<< 過載:

basic_ostream

&operator

<<(const

void

*value

);這個過載可以輸出指標的值(也就是位址)。

然而 std::basic_ostream 還有幾個非成員 operator<< 過載:

template

CharT

,class

Traits

>basic_ostream

,Traits

>&operator

<<(basic_ostream

,Traits

>&os,

const

CharT*s

);template

CharT

,class

Traits

>basic_ostream

,Traits

>&operator

<<(basic_ostream

,Traits

>&os,

const

char*s

);template

Traits

>basic_ostream

,Traits

>&operator

<<(basic_ostream

,Traits

>&os,

const

char*s

);template

Traits

>basic_ostream

,Traits

>&operator

<<(basic_ostream

,Traits

>&os,

const

signed

char*s

);template

Traits

>basic_ostream

,Traits

>&operator

<<(basic_ostream

,Traits

>&os,

const

unsigned

char*s

);這些函式負責輸出由 char* 或其他字元型別的指標表示的字串。

所以由於 char* (或者 charT*)比 void* 更加特化(不知道特化是什麼沒關係,以後會學到),在 【cout << p】且 p 的型別是 char* 的情況下,負責輸出字串的 operator<< 過載會被呼叫。

(C語言)位址為什麼要變成指標才能賦值給指標變數呢?

szouc C語言中所有資料都具有兩個屬性,乙個是值,另外乙個是型別。即使值相同如果型別不一致也是不同的資料。有一道題 小區內有乙隻狗叫Oscar,有乙隻貓也叫Oscar,大晚上有人喊 Oscar 請問他找誰?Oscar 找我幹嘛?位址是乙個整型資料,而指標具有 指向物件型別的指標 的型別。因此即使...

c語言指標內容為什麼無故改變

暮無井見鈴 return 語句返回 name 所隱式轉換而得的指向 name 首元素 name 0 的指標。從 main2 退出的時候,其中 name 物件的儲存期和生存期就結束了。語義上我們可以認為這次呼叫中為 name 分配的儲存在退出函式後就是沒了。從而這個指標值變成懸垂了,通過該指標值解引用...

c 指標的定義為什麼是這樣?

int a 100,p a 或者其實是在問為什麼不自動推導p的型別?那也是可以的 auto a 100 auto p a 如果沒理解錯樓主的意思的話,樓主是感覺號就應該表達同乙個意思。但實際上不是,號在變數宣告裡表示指標,在指標變數前面表示取指標所指向的值。類似的情況在C 裡還有很多。你p不需要定義...