为什么以下代码产生输出“h”?我不明白。既然它取消引用它,它不应该打印出它的内存地址吗?
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << *("hello");
return 0;
}
答案 0 :(得分:5)
“hello”计算指向字符串第一个字符的指针,取消引用它会计算该字符。
答案 1 :(得分:2)
字符串文字(在本例中为"hello"
)是大小为const char
的{{1}}数组,其中N
是字符数加上空终止符。该数组可以衰减为指向第一个元素的指针。当您取消引用该指针时,您现在拥有该数组的第一个元素,即一个字符。这就是为什么N
在您给h
字符打印的原因。
答案 2 :(得分:0)
字符串保存在二进制文件的某个内存位置(编译源代码时)。
像"hello"
这样的字符串被转换为char *
(指向char的指针)。因此,当您取消引用它时,它将为您提供&#34;字符串&#34;的第一个字符。