假设我有这个C
代码
f((char []){ "hello" });
f((const char []){ "hello" });
f("hello");
在这三种情况下,
hello
都被复制到函数中。指向char数组第一个字符的指针初始化为函数参数。我知道,在C中,字符串文字对应于
char []
,而在C++中,字符串文字对应于const char []
,但它会创建与char []
或const char []
相同的代码吗?在C程序中,您能否将所有发生的
"string"
与(char []){ "string" }
交换,并在汇编级别得到相同的结果? 最佳答案
我不知道将生成什么代码,但根据C标准(6.5.2.5复合文本)
7个字符串文本,以及具有常量限定类型的复合文本,
不需要指定不同的对象。
还有一个例子
13例6类似于字符串文本,常量限定的复合文本
可以放入只读存储器,甚至可以共享。为了
例子,
(const char []){"abc"} == "abc"
如果共享文本的存储,则可能产生1。
正如您正确地提到的,C中的字符串文字具有非常量字符数组的类型。但是,它们不能修改。另一方面,可以修改没有限定符const的复合文本。这会影响生成的程序集代码。或者如果要将限定符const与复合文本一起使用,则结果类型与相应字符串文本的类型不同。所以这同样会影响生成的程序集代码。
另一个区别是字符串文本在任何情况下都具有静态存储持续时间,但是复合文本可以具有自动存储持续时间。这也会影响生成的程序集代码。
关于c - 字符串文字和const char []或char []之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35540473/