首页 > 解决方案 > 指向文字的指针?

问题描述

在阅读C++ Primer时,我遇到了这一行:
const char *cp = "Hello World";

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

标签: c++pointersliterals

解决方案


文字类型的存储类型:boolean、integer、floating、character 和 nullptr 未指定,因此它们不需要在内存中具有存储位置。

指定字面量字符串类型的存储类型: “...字符串字面量具有静态存储持续时间,因此在程序的生命周期内都存在于内存中...”来源:https ://en.cppreference.com/w/ cpp/语言/string_literal

因此,可以获取文字字符串的地址并将其存储在const char *.

正如@MichaelKenzel 所建议的:

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

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


推荐阅读