有没有区别:
char string = "name";
const char* point = string;
对比
const char string[] = "name";
你也能解释一下区别吗?
有没有区别:
char string = "name";
const char* point = string;
对比
const char string[] = "name";
你也能解释一下区别吗?
是的。
第一个简单地指向内存的只读部分,声明应该是:
const char* string = "name";
第二个创建一个足够长的数组来保存字符串"name"
(因此,四个字符加一个用于空终止符)并将字符串复制到分配的空间内。
#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 将正确显示“大提琴”。b1 将导致分段错误。
这是因为 b1 存储在代码的文本段中,而 b2 存储在数据段中。
我希望我没有搞砸...
此外,编译器可以通过识别在文本段上声明的某些内容来使其无效,但在代码中访问,因此 C 有时会流行起来,并将声明更改为数据段