c - &"string"与 "string"是同一地址吗?

标签 c string memory-address c-strings

我生成了一些如下所示的 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/

相关文章:

c - 跟踪gcc链接器链接过程

python - 使用 pandas 将句子拆分为包含不同数量单词的子字符串

python - 如何使用 .replace() 函数将字符串的最后 4 个字符以外的所有字符更改为 # 符号?

c++ - 通过指针进行的内存复制有时会丢失数据

c - 不同数据类型的变量如何分配内存?

char* 的 C 内存问题

c - 将 void 指针作为函数参数传递并将其转换为 timeval 数组

c - typedef 函数指针 -> 从不兼容的指针类型初始化

java - 新扫描仪出错

assembly - 在32位保护模式下使用变量偏移文本