MGZ*_*ero 56 c++ pointers sizeof
指针的大小是否与其指向的类型的大小相同,或者指针总是具有固定大小?例如...
int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;
std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";
Run Code Online (Sandbox Code Playgroud)
这会是什么输出?会sizeof(xPtr)
返回4并sizeof(yPtr)
返回1,或者2指针实际上会返回相同的大小吗?我问这个的原因是因为指针存储的是存储器地址而不是它们各自存储的地址的值.
Jen*_*ens 72
功能指针可以具有非常不同的大小,在X86机器上可以是4到20字节,具体取决于编译器.所以答案是否定的 - 尺寸可能会有所不同.
另一个例子:采用8051程序,它有三个内存范围,因此有三种不同的指针大小,从8位,16位,24位,取决于目标所在的位置,即使目标的大小始终相同(例如char) .
Nat*_*one 70
指针通常具有固定的大小,例如.在32位可执行文件上,它们通常是32位的.有一些例外,比如旧的16位窗口,当你不得不区分32位指针和16位......通常可以非常安全地假设它们在现代桌面操作系统的给定可执行文件中是统一的.
编辑:即便如此,我强烈建议不要在你的代码中做出这个假设.如果你要写一些绝对必须有一定尺寸指针的东西,你最好检查一下!
函数指针是一个不同的故事 - 请参阅Jens的回答以获取更多信息.
pee*_*ush 15
在32位机器上,指针的大小是32位(4字节),而在64位机器上则是8字节.无论他们指向哪种数据类型,它们都具有固定的大小.
在同一架构上,指针的大小并不总是相同.
您可以阅读更多关于"近","远"和"巨大"指针的概念,就像指针大小不同的情况一样...
http://en.wikipedia.org/wiki/Intel_Memory_Model#Pointer_sizes