Sin embargo, no entiendo bien el tema de malloc() aqui: ¿ que tiene que ver si se reserva memoria para el contenido con donde queda el puntero en memoria ? (mas alla del caso particular de un puntero nulo)
De la misma forma que puedes reservar memoria dinámica para, por ejemplo, una estructura o un int, puedes reservar memoria dinámica para un puntero.
int** p
= (int**)malloc(sizeof(int*)); *p
= (int*)malloc(sizeof(int)); **p = 5;
En este caso habría 2 punteros: uno en el
heap (*p), y el otro en la pila (p).