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

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


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( "%d\n", 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