2017-07-12 60 views
-2

爲什麼下面的代碼產生輸出「h」?我不明白。由於它取消了引用,它不應該打印出它的內存地址嗎?當您在C++中取消引用字符串時會發生什麼情況

#include <iostream> 
    #include <iomanip> 

using namespace std; 

int main() { 
    cout << *("hello"); 

    return 0; 
} 
+6

解引用通常與獲取地址相反。 – Ryan

+5

字符串文字被解釋爲字符數組。取消數組返回第一個值。 – Frank

+0

可能的重複:https://stackoverflow.com/questions/13898535/what-is-the-effect-of-dereferencing-a-string-literal-in-c – Rakete1111

回答

0

該字符串保存在二進制文件中的某個內存位置(編譯源文件時)。

"hello"這樣的字符串被轉換爲char *(指向char的指針)。因此,當您解除引用時,它會爲您提供「字符串」的第一個字符。

+0

都是指向字符的字符串指針? – stoicbutterfly

+0

@stoicbutterfly號他們是字符數組。 – NathanOliver

+0

那麼爲什麼它轉換爲char *? – stoicbutterfly

5

「hello」求值爲指向字符串的第一個字符的指針,取消引用它評估爲該字符。

2

(在這種情況下"hello")字符串文字是大小Nconst char一個陣列,其中N是字符的數目加上一個空終止。該數組可以衰減爲指向第一個元素的指針。當您取消引用該指針時,您現在擁有數組的第一個元素,即一個字符。這就是爲什麼h打印時,你給cout一個字符。

相關問題