我对此有点困惑。在我的系统上,如果我这样做:
printf("%d", sizeof(int*));
这只会产生 4。现在,同样的情况发生在sizeof(int)
. 结论:如果整数和指针都是 4 个字节,则可以安全地将指针“转换”为 int(即它指向的内存可以存储在 int 中)。但是,如果我这样做:
int* x;
printf("%p", x);
返回的十六进制地址远远超出了 int 范围,因此任何将值存储在 int 中的尝试显然都会失败。
这怎么可能?如果指针占用 4 个字节的内存,它怎么能存储超过 2 32?
编辑:正如一些用户所建议的,我发布了代码和输出:
#include <stdio.h>
int main()
{
printf ("%d\n", sizeof(int));
printf ("%d\n", sizeof(int*));
int *x;
printf ("%d\n", sizeof(x));
printf ("%p\n", x);
}
输出:
4
4
4
0xb7778000