大小(一些指针)总是等于4吗?

大小(一些指针)总是等于4吗?

例如:sizeof(char*)返回4.同样int*long long*我尝试过的一切。有例外吗?



Cats萌萌
浏览 282回答 3
3回答

收到一只叮咚

你得到的保证是sizeof(char) == 1..没有其他保证,包括没有保证sizeof(int *) == sizeof(double *).实际上,指针在16位系统上是2(如果你能找到的话),在32位系统上是4,在64位系统上是8,但是依赖于给定的大小没有什么好处。

森林海

即使在普通的x86 32位平台上,您也可以获得各种指针大小,例如:struct A {};struct B : virtual public A {};struct C {};struct D : public A, public C {};int main(){&nbsp; &nbsp; cout << "A:" << sizeof(void (A::*)()) << endl;&nbsp; &nbsp; cout << "B:" << sizeof(void (B::*)()) << endl;&nbsp; &nbsp; cout << "D:" << sizeof(void (D::*)()) << endl;}在Visualc+2008下,我得到了4、12和8的指针到成员函数的大小.

慕勒3428872

只是已经发布的列表的另一个例外。在32位平台上,指针可以用6,不是4,字节:#include&nbsp;<stdio.h>#include&nbsp;<stdlib.h>int&nbsp;main()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;far*&nbsp;ptr;&nbsp;//&nbsp;note&nbsp;that&nbsp;this&nbsp;is&nbsp;a&nbsp;far&nbsp;pointer &nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;"%d\n",&nbsp;sizeof(&nbsp;ptr)); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;EXIT_SUCCESS;}如果您用OpenWatcom编译这个程序并运行它,您将得到6,因为它支持的远指针由32位偏移量和16位段值组成。
打开App,查看更多内容
随时随地看视频慕课网APP