为什么 void 指针会给出与它指向的地址不同的地址?

Why void pointer would give different address than the one it is pointing to?

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int *pi = NULL;
    void *voidptr = pi;
    int num = 100;
    pi = &num;

    printf("%p\n",pi);
    printf("%p\n", voidptr);
    return 0;
}

为什么第二个 printf 会给出 0x0 而不是与第一个相同的地址?

因为对一个对象的赋值不会影响 C 中的另一个对象,并且 voidptr 不会更新,因为 pi,当时的值是 NULL,被赋值给它。

顺便说一下,您通过将错误类型的数据传递给 printf() 来调用 未定义的行为 :您传递了 int*%p 期望void*.