是&"字符串"与"字符串"相同的地址?

时间:2014-07-21 22:30:14

标签: c string memory-address c-strings

我有一些生成的C代码,如下所示:

char *example[] = {&" ",&"\n", &"\t"};

如果我自己写这个,我会丢掉&符号(&),因为字符串文字已经是char *类型。对我来说,example 应该生成声明为​​char**[]

我是否可以确定指针是否与& s相同?这是否取得了在C?中明确定义的地址的地址?

编辑:我正在调查当前生命周期中某些不接受任何更改的软件的警告。 printf("%p", &"hello world");是否始终与printf("%p", "hello world");相同,还是依赖于编译器?

1 个答案:

答案 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"};