Pointers 为什么我的内存有18位地址?D:

Pointers 为什么我的内存有18位地址?D:,pointers,Pointers,我是按照一个教程进行编程的,当我在指针教程中时,我注意到thsi代码的输出比正常值大得多,它是ptr=0x000000cd9d1cf504:/why int main() { int pointerTest = 6; void* ptr = 0; ptr = &pointerTest; std::cout << ptr << std::endl; std::cin.get(); } 它不是一个18位的地址-它只有16

我是按照一个教程进行编程的,当我在指针教程中时,我注意到thsi代码的输出比正常值大得多,它是ptr=0x000000cd9d1cf504:/why

int main()
{

    int pointerTest = 6;
    void* ptr = 0; 
    ptr = &pointerTest;
    std::cout << ptr << std::endl;

    std::cin.get();
}

它不是一个18位的地址-它只有16位。前缀0x仅仅表示它后面的内容将以形式出现。另一种常用的十六进制整数表示法是h,有时是x,如VHDL中的前缀或后缀,例如hCD9D1CF504、h'CD9D1CF504或CD9D1CF504h-请注意,除非十六进制数字A-F大写,否则这是非常不清楚的

一个十六进制数字表示4位,因此指针的大小为4*16=64位。换句话说,编译器生成的二进制可执行文件是64位的,而教程二进制文件可能是32位的,正如@Hawky在注释中指出的那样


要完全理解32位和64位代码之间的差异,您必须学习计算机体系结构,尤其是x86-64。不过,请注意——如果你选择走这条路,那就要为一生的痛苦做好准备,最糟糕的是你可能会喜欢它。

请定义正常以及你期望正常的原因,然后想想你正在使用的操作系统和编译器。我想你是在用64位编译,而教程使用的是32位。