爲什麼下面的代碼產生輸出「h」?我不明白。由於它取消了引用,它不應該打印出它的內存地址嗎?當您在C++中取消引用字符串時會發生什麼情況
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << *("hello");
return 0;
}
爲什麼下面的代碼產生輸出「h」?我不明白。由於它取消了引用,它不應該打印出它的內存地址嗎?當您在C++中取消引用字符串時會發生什麼情況
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << *("hello");
return 0;
}
該字符串保存在二進制文件中的某個內存位置(編譯源文件時)。
像"hello"
這樣的字符串被轉換爲char *
(指向char的指針)。因此,當您解除引用時,它會爲您提供「字符串」的第一個字符。
都是指向字符的字符串指針? – stoicbutterfly
@stoicbutterfly號他們是字符數組。 – NathanOliver
那麼爲什麼它轉換爲char *? – stoicbutterfly
「hello」求值爲指向字符串的第一個字符的指針,取消引用它評估爲該字符。
(在這種情況下"hello"
)字符串文字是大小N
的const char
一個陣列,其中N
是字符的數目加上一個空終止。該數組可以衰減爲指向第一個元素的指針。當您取消引用該指針時,您現在擁有數組的第一個元素,即一個字符。這就是爲什麼h
打印時,你給cout
一個字符。
解引用通常與獲取地址相反。 – Ryan
字符串文字被解釋爲字符數組。取消數組返回第一個值。 – Frank
可能的重複:https://stackoverflow.com/questions/13898535/what-is-the-effect-of-dereferencing-a-string-literal-in-c – Rakete1111