我生成了一些如下所示的 C 代码:
char *example[] = {&" ",&"\n", &"\t"};
如果我自己写这个,我会删除与号 (&),因为字符串文字已经是 char *
类型。对我来说,它看起来像是 example
应该 已生成并声明为 char**[]
。
我能否确定有或没有 &
的指针是相同的?这是获取 C 中明确定义的地址的地址吗?
编辑:我正在调查一些当前处于生命周期中不接受任何更改的软件的警告。 printf("%p", &"hello world");
是否始终与 printf("%p", "hello world");
相同,或者是这样依赖于编译器?
最佳答案
Is &“string” the same address as “string”?
不,他们的类型不同。
"hello world"
对象的类型为char [12]
。至于表达式上下文中的其他数组,则转换为 char *
。
但是:
&"hello world"
具有类型char (*)[12]
。
所以在你的例子中,它也意味着:
char *example[] = {&" ",&"\n", &"\t"};
是一个无效声明,因为初始化列表中的数组元素不是 char *
类型。
这是正确的声明:
char *example[] = {" ", "\n", "\t"};
对于这个问题,如果您必须使用&
,以下是正确的声明:
char (*example[3])[] = {&" ",&"\n", &"\t"};
关于c - &"string"与 "string"是同一地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875925/