c - printf 中变量地址的输出

标签 c pointers

如果我在 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/

相关文章:

c - 我如何制作一个函数来计算我的订单总数并将价格相加?

c++ - 此 C++ 代码包含哪些未定义的行为

c - 在不使用指向指针的指针的情况下反转链表

c - 如何处理 shell 命令过滤器的逻辑链?

C 程序 - srand()

c - C 中的 libuv 库 :Change thread pool size

c++ - 单向链表在中间添加节点

C99/C11 自引用子对象初始化可能吗?

c - 链表中指针指针的奇怪行为

c++ - 如何捕捉 "free(): invalid pointer:"