char **s = &"Is this valid?";
在C语言中,获取字符串文字存储地址的行为是被允许的吗?我知道字符串字面值存储在.rodata数据段中。然而,获取该地址的地址是没有意义的。
需要注意的是,gcc编译器会编译并生成可执行文件。
您的示例无效:
char **s = &"Is this valid?"; // Not valid, wrong type
这是有效的:
char (*s)[15] = &"Is this valid?"; // OK
"Is this valid?"
的类型是char[15]
。一个指向含有15个char
元素的数组的指针的类型是char (*)[15]
。因此,&"Is this valid?"
的类型是char (*)[15]
。
字符串字面值的类型是char[N+1]
,其中N
是字符串的长度。
&"这是有效的吗?"
的类型为 char (*)[15]
(即指向长度为15的char
数组的指针)。
如果使用-Wall
编译,GCC会告诉你,你的代码无效。
-Wall -Werror
时出了问题。 - Oliver Charlesworth