【发布时间】:2014-06-08 00:02:00
【问题描述】:
我正在使用 LCTHW 学习 C,我遇到了一些我感兴趣的指针内容,所以我找到了 this。在浏览它时,我发现了这段代码:
void *vptr; // declare as a void pointer type
int val = 1;
int *iptr;
// void type can hold any pointer type or reference
iptr = &val;
vptr = iptr;
printf("iptr=%p, vptr=%p\n", (void *)iptr, (void *)vptr);
跑步给了我这样的东西:
iptr=0x7fffa97a8464, vptr=0x7fffa97a8464
显然,内存地址是相同的,所以 C 为它们打印出相同的东西。但是,在试验代码并放入时,而不是最后一行:
printf("iptr=%p, vptr=%p\n", &iptr, &vptr);
我明白了:
iptr=0x7fff61a21ee0, vptr=0x7fff61a21ed8
我打印出两个不同的内存地址,这不应该发生。第一个问题:如果这里的&符号表示“地址”,正如丹尼斯在帖子中所说,那么为什么这两行代码输出两个不同的东西?第二个问题:由于这两行代码输出了两个不同的东西,显然 (void *)pointer 的含义一定与 &pointer 不同。这两件事有什么区别?
【问题讨论】:
标签: c pointers void memory-address