ポインタについてなんですけど勉強不足で疑問が出てきました

今スマートフォンで動かせる環境がないので正しい構文かわかりませんが

void f(int *a) {*a=5;}

int main(){
 int x=1;
  f(&x);
  printf("%d",x);
  return 0;
}

この時の結果は5になるかと思います

void f(int &a) {a=5;}

int main(){
 int x=1;
  f(x);
  printf("%d",x);
  return 0;
}

ちゃんと試していなくて申し訳ないですが...

両方5になると思います
上の書き方と下の書き方の違いがわからないです
生成されるオブジェクトファイル?に違いはありますか

また、どちらの方がどのような所で優れてますか