I know:
char * is a pointer to char.
and
int * is a pointer to int.
So, i want to confirm following two things:
-
So now suppose I am on 32 bit machine, then that means memory addresses are 32 bit wide.
Thus that means size of char * and int * is both 32 bits ( 4 bytes), right ?
Also is size of char * * also same as size of int * ? -
suppose I have:
int * ptr;
Thus now doing *((char * *) ptr) = 0x154 is same as *((int *) ptr) = 0x514 same, right ?
( 0x514 is just any random memory address)
Platform: I am on x86.
P.S.: I know type casting is not a suggested way to code. But I am doing Kernel coding, thus I HAVE TO do type casting !
In C pointers are not guaranteed to have the same size. Now in reality most implementations pointers will be the same size, but that is an implementation detail of the compiler.
From the C Faq:
Also
*((char *)ptr) = 0x154is not the same as*((int *)ptr) = 0x154. Because you are dereferencing the pointer you will write data the size of acharand the size of anintinto the location pointed to byptr. Assuming an 8 bit char and a 32 bit int,*((char *)ptr) = 0x154will write0x154to the memory address assigned toptrand*((int *)ptr) = 0x154will write0x0000000154to the 4 bytes starting at the address assigned toptr.