Pero claro que existe una diferencia.
 
int& es azúcar sintáctica para manejar punteros. 
Y como tal claro que existe una diferencia entre int* e int*&    
Código C++:
Ver original- #include <iostream> 
-   
- using namespace std; 
-   
- void f1(int *f) { 
-     int a = 10; 
-     f = &a; 
-     cout << "f1 " << f << endl; 
- } 
-   
- void f2(int *&f) { 
-     int a = 10; 
-     f = &a; 
-     cout << "f2 " << f << endl; 
- } 
-   
- int main() { 
-   
-     int f = 10; 
-     int *p = &f; 
-      
-     cout << "1 " << p << endl; 
-     f1(p); 
-     cout << "1 " << p << endl; 
-   
-     cout << "2 " << p << endl; 
-     f2(p); 
-     cout << "2 " << p << endl; 
-      
-     return 0; 
- } 
Mira como la primer función `f1` pasa el valor por copia. Mientras la segunda función `f2` pasa el puntero por 
referencia. 
En cualquiera de los 2 casos ten cuidado.