C++ 在c+;中取消对字符串的引用时会发生什么+;

C++ 在c+;中取消对字符串的引用时会发生什么+;,c++,C++,为什么下面的代码会产生输出“h”?我不明白。既然它正在解引用它,它不应该打印出它的内存地址吗 #include <iostream> #include <iomanip> using namespace std; int main() { cout << *("hello"); return 0; } #包括 #包括 使用名称空间std; int main(){ cout“hello”计算为指向字符串第一个字符的指针,取消引用后

为什么下面的代码会产生输出“h”?我不明白。既然它正在解引用它,它不应该打印出它的内存地址吗

#include <iostream>
    #include <iomanip>

using namespace std;

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

    return 0;
}
#包括
#包括
使用名称空间std;
int main(){

cout“hello”计算为指向字符串第一个字符的指针,取消引用后计算为该字符。

字符串文字(
“hello”
)是一个大小为
N
const char
数组,其中
N
是字符数加上一个空终止符。该数组可以衰减为指向第一个元素的指针。当您取消引用该指针时,您现在拥有数组的第一个元素,即字符。这就是为什么
h
会按您给定的打印出来的原因e> cout
一个字符。

字符串以二进制形式保存在某个内存位置(编译源代码时)


“hello”
这样的字符串被转换为
字符*
(指向字符的指针)。因此,当您取消引用它时,它将为您获取“字符串”的第一个字符.

解除引用通常与获取地址相反。字符串文字被解释为字符数组。解除对数组的引用将返回第一个值。可能重复:@stoicbutterfly否。它们是字符数组。那么为什么要将其转换为char*?@stoicbutterfly字符串文字是一个产生ty值的表达式pe
const char*
。字符串文字与字符串不同。文字是出现在源文件中的字节
“hello”
,字符串是出现在可执行文件中的字符数组
{h',e',l',l',o',“\0'}
,无论何时使用“name”在一个数组中,你得到一个指针,它的第一个成员是C++的,因为它是如何在C中工作的……因为40年的历史原因。一个代码< char */COD>通常是指向一个字符数组的第一个字符的指针。许多函数会遍历数组,递增指针,直到一个“\\”0个字符。已找到。如果找不到“\0”,则函数可以访问数组之外的内容。这是
std::string
优于字符数组的原因之一。