![](/img/trans.png)
[英]Is there a difference between const char * const and const char []?
[英]Difference between string literal and const char[], or char[]
假設我有這個C
代碼
f((char []){ "hello" });
f((const char []){ "hello" });
f("hello");
在所有三種情況下,
指向 char 數組第一個字符的指針被初始化為函數參數。hello
被復制到函數中。
我知道在 C 中,字符串文字對應於char []
而在 C++ 中,字符串文字對應於const char []
,但它會創建與char []
或const char []
相同的代碼嗎?
在 C 程序中,您能否將所有出現的"string"
與(char []){ "string" }
交換並在匯編級別獲得相同的結果?
我不能說會生成什么代碼,但根據 C 標准(6.5.2.5 復合文字)
7 字符串文字和具有 const 限定類型的復合文字不需要指定不同的對象。
還有一個例子
13 示例6 像字符串文字一樣,const 限定的復合文字可以放入只讀存儲器中,甚至可以共享。 例如,
(const char []){"abc"} == "abc"
如果文字的存儲是共享的,則可能會產生 1。
正如您正確提到的,C 中的字符串文字具有非常量字符數組的類型。 但是,它們可能不會被修改。 另一方面,可以修改沒有限定符 const 的復合文字。 這會影響生成的匯編代碼。 或者,如果將限定符 const 與復合文字一起使用,則結果類型與相應字符串文字的類型不同。 所以這又會影響生成的匯編代碼。
另一個區別是字符串文字在任何情況下都具有靜態存儲持續時間,而復合文字可以具有自動存儲持續時間。 這也會影響生成的匯編代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.