Just remember this: a pointer should always point to a valid address in memory. So if you have a double**, then both the double* that it points to and the double that that points to must be a valid address, if that makes sense. Here's an example using both real and dynamically allocated variables:
Code:
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
double
d1 = 1024,
* dp1 = &d1,
** dpp1 = &dp1,
** dpp2;
dpp2 = malloc( sizeof( double* ) );
*dpp2 = malloc( sizeof( double ) );
**dpp2 = **dpp1;
printf( "Value: %f\n", **dpp2 );
free( *dpp2 );
free( dpp2 );
return 0;
}