Is the sizeof(some pointer) always equal to four?

For example: sizeof(char*) returns 4. As does int* , long long* , everything that I've tried. Are there any exceptions to this?


The guarantee you get is that sizeof(char) == 1 . There are no other guarantees, including no guarantee that sizeof(int *) == sizeof(double *) .

In practice, pointers will be size 2 on a 16-bit system (if you can find one), 4 on a 32-bit system, and 8 on a 64-bit system, but there's nothing to be gained in relying on a given size.


Even on a plain x86 32 bit platform, you can get a variety of pointer sizes, try this out for an example:

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;
}

Under Visual C++ 2008, I get 4, 12 and 8 for the sizes of the pointers-to-member-function.

Raymond Chen talked about this here.


Just another exception to the already posted list. On 32-bit platforms, pointers can take 6, not 4 , bytes:

#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;
}

If you compile this program with Open Watcom and run it, you'll get 6, because far pointers that it supports consist of 32-bit offset and 16-bit segment values

链接地址: http://www.djcxy.com/p/40278.html

上一篇: 我的源代码是否显示了我对c ++中结构的理解?

下一篇: sizeof(某个指针)总是等于四?