我有一些生成的C代码,如下所示:
char *example[] = {&" ",&"\n", &"\t"};
如果我自己写这个,我会丢掉&符号(&),因为字符串文字已经是char *
类型。对我来说,example
应该生成声明为char**[]
。
我是否可以确定指针是否与&
s相同?这是否取得了在C?中明确定义的地址的地址?
编辑:我正在调查当前生命周期中某些不接受任何更改的软件的警告。 printf("%p", &"hello world");
是否始终与printf("%p", "hello world");
相同,还是依赖于编译器?
答案 0 :(得分:7)
&“string”与“string”的地址相同?
不,他们的类型不同。
"hello world"
对象的类型为char [12]
。对于表达式上下文中的其他数组,它将转换为char *
。
可是:
&"hello world"
的类型为char (*)[12]
。
所以在你的例子中,它也意味着:
char *example[] = {&" ",&"\n", &"\t"};
是无效声明,因为初始化列表中的数组元素不是char *
类型。
这是正确的声明:
char *example[] = {" ", "\n", "\t"};
为了这个问题,如果你必须使用&
,这是正确的声明:
char (*example[3])[] = {&" ",&"\n", &"\t"};