sizeof(某个指针)总是等于四?
例如: sizeof(char*)
返回4.像int*
, long long*
,我试过的所有东西。 这有没有例外?
你得到的保证是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()
{
cout << "A:" << sizeof(void (A::*)()) << endl;
cout << "B:" << sizeof(void (B::*)()) << endl;
cout << "D:" << sizeof(void (D::*)()) << endl;
}
在Visual C ++ 2008下,我得到了4,12和8个指针到成员函数的大小。
Raymond Chen在这里谈到了这件事。
已发布列表的另一个例外。 在32位平台上,指针可以占用6个而不是4个字节:
#include <stdio.h>
#include <stdlib.h>
int main() {
char far* ptr; // note that this is a far pointer
printf( "%dn", sizeof( ptr));
return EXIT_SUCCESS;
}
如果你用Open Watcom编译这个程序并运行它,你会得到6,因为它支持的远指针由32位偏移量和16位段值组成
链接地址: http://www.djcxy.com/p/40277.html