为什么这段代码在C中有用?

时间:2014-09-06 19:02:27

标签: c string

char *a= "ABC";

"ABC"字符串属于const char*类型。如何将其地址分配给char*指针? 不应该是一个错误吗?

2 个答案:

答案 0 :(得分:3)

char *a = "ABC";

"ABC"在C中的类型为char [4],而在C ++中的类型为const char [4]

答案 1 :(得分:2)

C中的字符串文字具有非const数组的类型。从C标准(6.4.5字符串文字):

  

然后使用多字节字符序列初始化数组   静态存储的持续时间和长度恰好足以容纳   序列。对于字符串文字,数组元素具有   键入char ,并使用多字节字符序列的各个字节进行初始化。

尽管C中的字符串文字具有非const数组的类型,但它们不应被修改。

  

如果程序试图修改这样的数组,则行为是   未定义。

在这方面考虑例如标准C函数strchr的声明:)

char * strchr(const char * s,int c);

该函数返回一个指向同一字符串的指针,该字符串与使用限定符const。

定义的参数相同

在C ++中,字符串文字具有常量字符数组的类型。

来自C ++标准

  

8也引用普通的字符串文字和UTF-8字符串文字   作为窄字符串文字。窄字符串文字具有类型   “n const char数组”,其中n是下面定义的字符串大小,并且具有静态存储持续时间(3.7)。