C 中字串和數字的意外串聯:探索「456」1
程式碼片段
#include
int main()
{
std::cout << "25"+1; return 0;
}
提出了一個令人困惑的問題:為什麼表達式“25”1 輸出“5”而不是預期的“26”?為了解開這個謎團,讓我們深入研究這段程式碼的內部運作原理。
在 C 中,像「25」這樣的字串文字不被視為真正的字串,而是被視為字元陣列。在給出的範例中,「25」相當於字元陣列 {'2', '5', ' '},其中 ' ' 是表示字串結束的空終止符。
當在沒有明確轉換的情況下在表達式中使用數組,它會自動衰減為指向其第一個元素的指標。因此,「25」實際上衰減為 &「25」[0],即指向字元「2」的指標。向該指針加 1 會使其指向下一個字符,即“5”。
當我們考慮 std::ostream(std::cout 的類型)的行為時,情節會變得更加複雜。該類別可以接受 char 和 const char (char* 衰減為)並將它們解釋為以 null 結尾的字串。因此,當它收到 &"25"[0] 時,它會列印該指針中的字符,直到遇到空終止符,從而導致輸出顯示為“5”。
以上是為什麼C語言中「25」1輸出「5」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!