c++ - 为什么可以将一个数组赋值给一个char指针?

标签 c++ arrays pointers string-literals

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

int value = 123;
int* p = &value;

当您创建一个字符指针时,您可以为其分配一个字符数组而不需要包含地址:

char* c = "Char Array";

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

最佳答案

How does this work?

字符串文字存储在可执行文件的只读数据部分(意味着它在编译期间初始化)并且 c 被初始化为指向该内存位置。隐式 array-to-pointer conversion处理其余部分。

请注意,将字符串文字转换为 char* 已被弃用,因为内容无论如何都是只读的;指向字符串文字时更喜欢 const char*

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

Why can't other type pointers do the same thing?

为了方便起见,这是从 C 继承的字符串文字的特例。

关于c++ - 为什么可以将一个数组赋值给一个char指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107996/

相关文章:

c - 理解 C 指针

c - 指针地址和段错误

c++ - 使用getline从文件中读取多行?

c++ - 根据模板参数命名成员函数

python - Image.fromarray 不能与 array.array 一起使用

javascript - 在 Javascript 中使用 array.splice 删除第零个索引。 (FCC Slasher Flick 挑战)

c++ - 不能存储太长的 int 类型

c++ - 没有参数的 C++ throw 会在另一个框架内工作以重新抛出异常吗?

c++ - 分配不同大小的 std::array

c - 使用 C 返回数组