如果我在 Visual C++ 2017 中构建并运行以下程序:
#include <stdio.h>
int main()
{
int a[3] = { 0 };
for (int i = 0; i < 3; i++)
{
printf("%llu %u %p\n", a + i, a + i, a + i);
}
return 0;
}
我看到如下输出:
31519768560270096 7338768 000F1055
31519785740139284 7338772 000F1055
31519802920008472 7338776 000F1055
我无法理解。
为什么输出%llu
有那么不同吗? sizeof(int)
在我的平台上是 4。
为什么输出%p
都一样吗?它们是不同变量的地址。
仅输出%u
似乎是一致的 - 3 个数组元素的连续内存位置,每个元素有 4 个字节。但这些输出与 %llu
都不匹配也不%p
.
最佳答案
您的代码导致 undefined behaviour使用错误的格式说明符。结果毫无意义。
程序员必须为所提供的参数使用正确的格式说明符,C 中没有中间“编译器魔法”。如果您不遵循规则,那么您的程序将不再受上述任何规则的覆盖规则和任何事情都可能发生,在您的情况下,这表现为意外的输出。
关于c - printf 中变量地址的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289686/