通常当您声明一个指针(例如 int)时,您需要将一个内存地址分配给它:
int value = 123;
int* p = &value;
当您创建一个字符指针时,可以将一个字符数组分配给它,而无需包含地址:
char* c = "Char Array";
这是如何工作的?它是否分配内存并指向该内存?为什么其他类型的指针不能做同样的事情?
int value = 123;
int* p = &value;
当您创建一个字符指针时,可以将一个字符数组分配给它,而无需包含地址:
char* c = "Char Array";
这是如何工作的?它是否分配内存并指向该内存?为什么其他类型的指针不能做同样的事情?
这是如何工作的?
字符串文字在可执行文件中存储在只读数据段中(意味着它在编译期间初始化),而 c 被初始化为指向该内存位置。隐式的数组到指针转换处理其余部分。
请注意,将字符串文字转换为 char * 已被弃用,因为内容无论如何都是只读的;当指向字符串文字时,请使用 const char * 。
一个相关的构造是 char c [] =“Char Array”;,它会在运行时将字符串文字的内容复制到 char 数组中。
为什么其他类型的指针不能做同样的事情?
这是一种方便的特殊情况,从C语言继承而来。
int intArray1[] = {0, 1, 2}; // fist array
int * intArray2 = new int[10]; // second array
// can assign without & operator
int * p1 = intArray1;
int * p2 = intArray2;
char *
只是特指字符串字面值的类型实际上是const char *
,仍然允许赋值(带有有关弃用转换的警告)。
char* c = &'a';
- Neil Kirkchar * c =“ char array”
不会编译; 你是想问C吗? - edmz