c++ - const char* 在哪里获得指向内存地址的指针?
问题描述
这可能是一个简单的问题,但为什么 const char* 不需要指向内存地址呢?
例子:
const char* a = "Anthony";
并不是:
const char *a = // Address to const char
像其他类型一样吗?
解决方案
你可以想象这个声明
const char* a = "Anthony";
以下方式
const char string_literal[] = "Anthony";
const char *a = string_literal;
也就是说,编译器创建一个具有静态存储持续时间的字符数组,用于存储字符串"Anthony"
,并将数组第一个字符的地址(由于数组指示符隐式转换为指向它们的第一个字符的指针)分配给指针a
。
这是一个演示程序,显示字符串文字是字符数组。
#include <iostream>
#include <type_traits>
decltype( auto ) f()
{
return ( "Anthony" );
}
template <size_t N>
void g( const char ( &s )[N] )
{
std::cout << s << '\n';
}
int main()
{
decltype( auto ) r = f();
std::cout << "The size of the referenced array is "
<< std::extent<std::remove_reference<decltype( r )>::type>::value
<< '\n';
g( r );
return 0;
}
程序输出为
The size of the referenced array is 8
Anthony
字符串文字(存储字符串文字的数组)的大小等于,8
因为字符串还包括终止零字符 ' \0'
。
在演示程序中,表达式
std::extent<std::remove_reference<decltype( r )>::type>::value
可以只替换表达式
sizeof( r )
推荐阅读
- java - 如何为所有用户设置 AlarmManager 时区?
- validation - 如何修复验证提示中的通用对话框
- python - 如何使用 ezdxf python 包修改现有的 dxf 文件?
- c - 使用指针将多个字符串输入到二维数组中
- c++ - 零运行时错误的opencv Mat初始化
- python-3.x - 为什么这个字符串没有保存在全局变量中?
- c - 为什么要打印以前的输出?
- c++ - CMakiLists.txt 上的 CGAL::CGAL
- javascript - 我可以打开多个 Puppeteer 浏览器吗?
- c - ARMv7 汇编语言:如何反转 char 数组并将其输出到另一个 char 数组