内存地址不应以这种方式解释为有符号整数。数字的符号取决于最高位设置(假设2的补码表示法,当前使用的绝大多数系统都使用补码表示法),因此在32位系统上,大于0x80000000的内存地址将为负数,低于0x80000000的内存地址将为正数。这并没有什么实际意义。
您应该使用%p修饰符打印内存地址;或者,有些人使用%08x打印内存地址(在64位系统上使用%016llx )。这将始终打印为十六进制的无符号整数,这比有符号十进制整数有用得多。
代码语言:javascript复制int a;
printf("%p\n", &a);