2017-02-10 23 views
-2

我做一些練習在C++中,當我來到事不太清楚,我的字符串和INT:串聯在C++

cout << "String" + 1 << endl; 

輸出:特林

我認爲這是一些與指針運算,但是這是否意味着每次我使用不是以前定義的數組的一部分的引號打印某些內容時,我實際上創建了一個char數組?

+0

的''String''的類型是'const char *',所以是的,它是指針算術,但是你並沒有創建一個數組,它被燒入可執行文件(AFAIK)的數據部分。 – Borgleader

+0

你想回答爲什麼會發生這種情況或如何得到你想要的? – NathanOliver

+0

''字符串''是一個靜態生命期的字符串字面值,並且您是正確的指針算術正在發生。小心不要添加超過字符串的長度,因爲程序將開始讀取垃圾並調用ub。 – George

回答

7

帶引號的字符串(形式上是一個字符串字面量)是一個常量字符數組,無論您是打印它還是使用它來做任何其他事情。

5

代碼:

cout << "String" + 1 << endl; 

具有與此相同的效果:

const char *ptr = "String"; 
cout << ptr + 1 << endl; 

所以沒有你不創建一個新的數組,你只需要改變的指針,並將它傳遞給std::cout

+0

編譯器會將ptr + 1優化爲一個數字。 – Yashas

+0

@YashasSamaga和? – Slava

+0

沒有別的,但我不知道編譯器扔掉了做cout <<「String」+1的第一個字符; – Yashas