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"产生相同的结果?
应用于&“Hello”会产生一个指向该数组的指针(是的,它是一个数组并且在此上下文中不会衰减为指针)。
它仍然指向相同的位置,但它具有不同的类型(它具有char (*)[6],即指向 6 个字符的数组的指针)。printf忽略指针的实际类型并将其视为 a,char *因此它“有效”。
从技术上讲,为printf说明符使用“错误”的对象类型是未定义的行为。打开警告应该在现代编译器中指出这一点。
| 归档时间: |
|
| 查看次数: |
5456 次 |
| 最近记录: |