2012-03-31 41 views
5
char **s = &"Is this valid?"; 

獲取允許在C中存儲字符串文字的地址的地址嗎? 我知道字符串文字存儲在.rodata數據段中。但是,獲取該地址的地址是沒有意義的。在C中尋址字符串文字的地址

應該指出,gcc編譯這個併產生一個工作的可執行文件。

+2

它不與'-Wall -Werror'。 – 2012-03-31 19:22:36

回答

7

你舉的例子是無效的:

char **s = &"Is this valid?"; // Not valid, wrong type 

這是有效的:

char (*s)[15] = &"Is this valid?"; // OK 

類型的"Is this valid?"char[15]。指向char的數組15的指針的類型是char (*)[15]。所以&"Is this valid?"的類型是char (*)[15]

字符串文字的類型是char[N+1]其中N是字符串的長度。

2

&"Is this valid?"的類型是char (*)[15](即指向長度爲15的數組char的指針)。

您的代碼無效,因爲GCC會告訴您是否使用-Wall進行編譯。