带有地址运算符的 printf 字符串文字

Alk*_*ris 0 c string printf address-operator

#include<stdio.h>

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

Output : 
Hello
Hello
Run Code Online (Sandbox Code Playgroud)

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

cni*_*tar 6

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

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


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