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<< 過載會被呼叫。 szouc C語言中所有資料都具有兩個屬性,乙個是值,另外乙個是型別。即使值相同如果型別不一致也是不同的資料。有一道題 小區內有乙隻狗叫Oscar,有乙隻貓也叫Oscar,大晚上有人喊 Oscar 請問他找誰?Oscar 找我幹嘛?位址是乙個整型資料,而指標具有 指向物件型別的指標 的型別。因此即使... 暮無井見鈴 return 語句返回 name 所隱式轉換而得的指向 name 首元素 name 0 的指標。從 main2 退出的時候,其中 name 物件的儲存期和生存期就結束了。語義上我們可以認為這次呼叫中為 name 分配的儲存在退出函式後就是沒了。從而這個指標值變成懸垂了,通過該指標值解引用... int a 100,p a 或者其實是在問為什麼不自動推導p的型別?那也是可以的 auto a 100 auto p a 如果沒理解錯樓主的意思的話,樓主是感覺號就應該表達同乙個意思。但實際上不是,號在變數宣告裡表示指標,在指標變數前面表示取指標所指向的值。類似的情況在C 裡還有很多。你p不需要定義...(C語言)位址為什麼要變成指標才能賦值給指標變數呢?
c語言指標內容為什麼無故改變
c 指標的定義為什麼是這樣?