What are the difference in the passing mechanism of the following arrays
void foo(int* a)
void foo(int(&a) )
void foo(int a)
and if all the three absolutely does the same thing then what is the point of keeping 3 of them and does any method have any performance gain as compared to other?