之间是否存在差异:
char string = "name";
const char* point = string;
VS
const char string[] = "name";
请您解释一下这个区别吗?
答案 0 :(得分:5)
是
第一个只是指向内存的只读部分,声明应该是:
const char* string = "name";
第二个创建一个足够长的数组来保存字符串"name"
(因此,四个字符加上一个空终止符)并将字符串复制到分配的空间内。
答案 1 :(得分:0)
#include <stdio.h>
int main(int argc, const char** argv)
{
const char *a1 = "hello";
const char a2[] = "hello";
char* b1;
char* b2;
b2 = (char*) a2;
*b2 = 'c';
puts(b2);
b1 = (char*)a1;
*b1 = 'c';
puts(b1);
return 0;
}
b2将正确显示'cello'。 b1会导致分段错误。
这是因为b1存储在代码的文本段中,而b2存储在数据段中。
我希望我没有弄乱它......
此外,编译器可以通过识别在文本段上声明某些内容而使其无效,但是在代码中访问,因此C有时可以捕获,并将声明更改为数据段