指向文字的指针?

Pointer to a literal?

本文关键字:指针 文字      更新时间:2023-10-16

在阅读C++入门时,我遇到了这样一句话:
const char *cp = "Hello World";

据我了解,"Hello World"是一个字符串文字,它是一个常量字符数组。由于数组衰减到指向数组中第一个元素的指针。这是否意味着cp指向H哪个是字面意思?不是不可能有一个指向文字的指针,因为指针必须指向内存中对象的地址吗?

未指定文本类型的存储类型:布尔值、整数、浮点数、字符和 nullptr,因此它们不需要在内存中具有存储位置。

指定文本字符串类型的存储类型:"...字符串文本具有静态存储持续时间,因此在程序的生命周期内存中存在...">来源: https://en.cppreference.com/w/cpp/language/string_literal

因此,文本字符串的地址可以获取并存储在const char *中。

正如@MichaelKenzel所建议的:

从 C++17 草案标准 (n4659( https://timsong-cpp.github.io/cppwp/n4659/lex.string#16

计算字符串文本

会生成一个字符串文本对象 静态存储持续时间,从给定字符初始化为 上面指定。是否所有字符串文本都是不同的(即, 存储在非重叠对象中(以及是否连续 字符串文本的计算产生相同或不同的对象 未指定。[ 注意:尝试修改字符串的效果 文字是未定义的。 — 尾注 ]