c - 带地址运算符的 printf 字符串文字

标签 c string printf address-operator

#include<stdio.h>

int main()
{
    printf("%s\n", "Hello");
    printf("%s\n", &"Hello");
    return 0;
}

Output : 
Hello
Hello

谁能向我解释为什么 "Hello"&"Hello" 产生相同的结果?

最佳答案

& 应用于“Hello”会产生一个指向该数组的指针(是的,它是一个数组,并且在此上下文中它不会衰减为指针)。

它仍然指向相同的位置,但它具有不同的类型(它具有char (*)[6],即指向 6 个字符数组的指针)。 printf 忽略指针的实际类型并将其视为 char *,因此它“有效”。

<小时/>

从技术上讲,对 printf 说明符使用“错误”的对象类型是未定义的行为。打开警告应该会在现代编译器中指出这一点。

关于c - 带地址运算符的 printf 字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19119198/

相关文章:

python - 如何避免子串

c - 我们如何返回最后一个字符串的索引或最后一个字符串的基地址?

c++ - (ptr - A[0])/(sizeof(A[0])/sizeof(A[0][0])) 的类型是什么?

c - 为什么我在printf语句中没有添加 `%`却输出了 `\n`?

c - GCC 5.1 循环展开

c++ - 在C++中为char数组分配固定内存

c++ - 从 WINAPI 获取文件的先前版本

c - 不同的编译器...我需要为所有编译器安装可再发行库吗?

c - 从C中的字符串中删除空格

c - 为什么以下代码的输出为零?