为什么“char *”可以指向“const char *”?
可以在VC或gcc上正确编译以下代码:
char *str = "I am a const!"; str[2] = 'n';
但是,显然存在运行时错误。 因为“我是一个常客!” 是一个const char *,为什么编译器不会给出错误甚至是警告?
此外,如果我定义char a[] = "I am const!"
,a中的所有元素都可以修改,为什么这次字符串文字变得不nonconst
?
就C而言,该字符串文字不是const,它是一个char[14]
,你分配给一个char *,这是完全没问题的。
但是,C确实说改变字符串文字是未定义的行为。