在C中寻址字符串文字的地址

时间:2012-03-31 19:19:29

标签: c string literals

char **s = &"Is this valid?";

在C中获取允许存储字符串文字地址的地址吗? 我知道字符串文字存储在.rodata数据段中。但是,获取该地址的地址没有意义。

应该注意的是,gcc编译它并生成一个可用的可执行文件。

2 个答案:

答案 0 :(得分: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是字符串的长度。

答案 1 :(得分:2)

&"Is this valid?"的类型为char (*)[15](即指向长度为15的char数组的指针。)

您的代码无效,因为GCC会告诉您是否使用-Wall编译。