#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/