为什么 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 = #
printf("%p\n",pi);
printf("%p\n", voidptr);
return 0;
}
为什么第二个 printf 会给出 0x0 而不是与第一个相同的地址?
因为对一个对象的赋值不会影响 C 中的另一个对象,并且 voidptr
不会更新,因为 pi
,当时的值是 NULL
,被赋值给它。
顺便说一下,您通过将错误类型的数据传递给 printf()
来调用 未定义的行为 :您传递了 int*
而 %p
期望void*
.
#include <stdio.h>
int main(int argc, const char * argv[]) {
int *pi = NULL;
void *voidptr = pi;
int num = 100;
pi = #
printf("%p\n",pi);
printf("%p\n", voidptr);
return 0;
}
为什么第二个 printf 会给出 0x0 而不是与第一个相同的地址?
因为对一个对象的赋值不会影响 C 中的另一个对象,并且 voidptr
不会更新,因为 pi
,当时的值是 NULL
,被赋值给它。
顺便说一下,您通过将错误类型的数据传递给 printf()
来调用 未定义的行为 :您传递了 int*
而 %p
期望void*
.