字符串文字和const char []或char []之间的区别

时间:2016-02-21 18:55:35

标签: c string char const

假设我有C代码

f((char []){ "hello" });
f((const char []){ "hello" });
f("hello");

在所有三种情况下, hello被复制到函数中。一个指向char数组第一个字符的指针被初始化为函数参数。

我知道在C中,字符串文字对应char [],而在C ++中,字符串文字对应const char [],但它会创建与char []或{{相同的代码1}}?

在C程序中,你能用const char []交换"string"的所有出现并在汇编级别获得相同的结果吗?

1 个答案:

答案 0 :(得分:3)

我不能说将生成什么代码但是根据C标准(6.5.2.5复合文字)

  

7字符串文字和具有const限定类型的复合文字,   不需要指定不同的对象。

还有一个例子

  

13示例6与字符串文字类似,const限定的复合文字   可以放入只读内存,甚至可以共享。对于   例如,

(const char []){"abc"} == "abc"
  如果文字的存储是共享的,

可能会产生1。

正如您正确提到的,C中的字符串文字具有非常量字符数组的类型。但是它们可能不会被修改。另一方面,可以修改没有限定符const的复合文字。这可能会影响生成的汇编代码。或者,如果要使用带有复合文字的限定符const,则结果类型与对应的字符串文字的类型不同。因此,这可能会影响生成的汇编代码。

另一个区别是字符串文字在任何情况下都具有静态存储持续时间,但复合文字可以具有自动存储持续时间。这也会影响生成的汇编代码。