void hoge( int* a )
{
*a = 0;
}
は、コンパイラ側で
void hoge( int& a )
{
a = 0;
}

に変換されて動作していると考えていいのでしょうか?