char **s = &"Is this valid?";
在C中获取允许存储字符串文字地址的地址吗? 我知道字符串文字存储在.rodata数据段中。但是,获取该地址的地址没有意义。
应该注意的是,gcc编译它并生成一个可用的可执行文件。
答案 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
编译。