c++ - 指向文字的指针?
问题描述
在阅读C++ Primer时,我遇到了这一行:
const char *cp = "Hello World";
据我了解,"Hello World"
是一个字符串文字,它是一个常量字符数组。由于数组衰减为指向数组中第一个元素的指针。这是否意味着cp
指向H
哪个是文字?是否不可能有一个指向文字的指针,因为指针必须指向内存中对象的地址?
解决方案
文字类型的存储类型: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
评估字符串文字会产生一个具有静态存储持续时间的字符串文字对象,从上面指定的给定字符初始化。是否所有字符串文字都是不同的(即,存储在不重叠的对象中)以及字符串文字的连续评估是否产生相同或不同的对象是未指定的。[注意:尝试修改字符串文字的效果是未定义的。——尾注]
推荐阅读
- javascript - 通过给出时间来获取时区名称
- .htaccess - 麻烦 htaccess 重定向非 www 页面
- html - 如何在没有 HTML 的情况下将内容添加到网格单元格?
- node.js - 在数据存储上运行查询时无法获取错误以命中 catch 块
- redux - 在@angular-redux/store configureStore 9 ver 中正确注册史诗
- javascript - Vue.js 破坏了谷歌地图的功能
- python - 使用两个字典的输出不符合预期
- javascript - 数据表子行每 2 次更新工作一次
- javascript - 如何防止放大 chrome、firefox、safari?
- excel - VBA 从另一个应用程序访问活动 Excel 工作簿