首頁 >後端開發 >C++ >為什麼C語言中「25」1輸出「5」?

為什麼C語言中「25」1輸出「5」?

Patricia Arquette
Patricia Arquette原創
2024-11-01 14:38:02707瀏覽

Why Does

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn