Es una referencia a un puntero a un int. Esto significa que la función en cuestión puede modificar tanto el puntero como la propia int.
Puede simplemente pasa un puntero de, la complicación es que el puntero tiene que ser un l-valor, no sólo un valor r, así que por ejemplo
int myint;
function(&myint);
por sí sola no es suficiente y tampoco se permitiría 0/NULL, Donde como:
int myint;
int *myintptr = &myint;
function(myintptr);
sería aceptable. Cuando la función retorna, es bastante posible que myintptr
ya no apunte a lo que estaba señalando inicialmente.
int *myintptr = NULL;
function(myintptr);
también podría tener sentido si la función estaba esperando para asignar la memoria cuando se les da un puntero NULL. Consulte la documentación provista con la función (¡o lea la fuente!) Para ver cómo se espera que se use el puntero.
Ese error es debido a exactamente lo que estaba hablando con "debe ser un valor l, no solo un valor r". La regla en cuestión es "no se puede vincular una referencia temporal con una referencia no constante", el resultado del operador & "dirección de" es temporal. – Flexo