I\'m writing an interpreter and I\'d like to be able to store whatever value a function returns into a void pointer. I\'ve had no problem storing ints and various pointers a
On many systems a double
is 8 bytes wide and a pointer is 4 bytes wide. The former, therefore, would not fit into the latter.
You would appear to be abusing void*
. Your solution is going to involve allocating storage space at least as big as the largest type you need to store in some variant-like structure, e.g. a union
.
Here is it
int main ( ) {
double d = 1.00e+00 ; // 0x3ff0000000000000
double * pd = & d ;
void * * p = ( void * * ) pd ;
void * dp = * p ;
printf ( "%f %p %p %p \n" , d , pd , p , dp ) ;
return 0 ;
} ;
output
1.000000 0x7fff89a7de80 0x7fff89a7de80 0x3ff0000000000000
2nd and 3rd addresses could be different. A shortcut
void * dp = * ( void * * ) & d ;
Cheers
Of course it's possible to cast it. Void pointers is what makes polymorphism possible in C. You need to know ahead of time what you're passing to your function.
void *p_v ;
double *p_d ;
p_d = malloc( sizeof( double ) ) ;
p_v = ( void * ) p_d ;