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

上一篇: Is the sizeof(some pointer) always equal to four?

下一篇: connection string for sqlserver in Docker container