为什么可以将数组赋给char指针?

Dan*_*iel 5 c++ arrays pointers string-literals

通常,当您声明指针(例如int)时,您必须为其分配一个内存地址:

int value = 123;
int* p = &value;
Run Code Online (Sandbox Code Playgroud)

创建char指针时,可以为其指定char数组,而无需包含地址:

char* c = "Char Array";
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?它是否分配内存并指向它?为什么其他类型的指针不能做同样的事情?

eml*_*lai 7

这是如何运作的?

字符串文字存储在可执行文件的只读数据部分中(意味着它在编译期间初始化),c并初始化为指向该内存位置.隐式数组到指针转换处理其余部分.

请注意,char*不推荐使用字符串文字的转换,因为无论如何内容都是只读的; const char*在指向字符串文字时更喜欢.

相关构造char c[] = "Char Array";char在运行时将字符串文字的内容复制到数组中.

为什么其他类型的指针不能做同样的事情?

这是字符串文字的一种特殊情况,为方便起见,继承自C语言.