Punteros como argumentos de función en C

Si tuviera este código, por ejemplo:

int num = 5;
int *ptr = #

¿Cuál es la diferencia entre las dos funciones siguientes?

void func(int **foo);
void func(int *foo); 

Donde llamo a la función:

func(&ptr); 

Me doy cuenta de que el primero de los dos toma un puntero a un puntero como parámetro, mientras que el segundo solo toma un puntero.

Si pasofunc(&ptr), Efectivamente estoy pasando en un puntero. ¿Qué diferencia hace que el puntero apunte a otro puntero?

Creo que este último dará una advertencia de incompatibilidad, pero parece que los detalles no importan mientras sepas lo que estás haciendo. Parece que tal vez para facilitar la lectura y comprender la primera sea una mejor opción (puntero de 2 estrellas), pero desde un punto de vista lógico, ¿cuál es la diferencia?

Respuestas a la pregunta(6)

Su respuesta a la pregunta