&"string"与"string"的地址相同吗?

Cas*_*all 2 c string c-strings memory-address

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

char *example[] = {&" ",&"\n", &"\t"};
Run Code Online (Sandbox Code Playgroud)

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

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

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

oua*_*uah 7

&"string"与"string"的地址相同吗?

不,他们的类型不同.

 "hello world"
Run Code Online (Sandbox Code Playgroud)

对象有类型char [12].对于表达式上下文中的其他数组,它将转换为char *.

但:

 &"hello world" 
Run Code Online (Sandbox Code Playgroud)

有类型char (*)[12].

所以在你的例子中,它也意味着:

char *example[] = {&" ",&"\n", &"\t"};
Run Code Online (Sandbox Code Playgroud)

是一个无效的声明,因为初始化列表中的数组元素不是类型char *.

这是正确的声明:

char *example[] = {" ", "\n", "\t"};
Run Code Online (Sandbox Code Playgroud)

为了这个问题,如果你必须使用&,这里是正确的声明:

char (*example[3])[] = {&" ",&"\n", &"\t"};
Run Code Online (Sandbox Code Playgroud)