通常当您声明一个指针(例如 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/