First one passes by reference, which will affect the original object, second one passes by value which will make a copy of the object and only act on that.
void func1(int a)
{
a++;
}
void func2(int& a)
{
a++;
}
int main()
{
int a = 0;
int b = 0;
func1(a);
func2(b);
cout << a << endl; // outputs 0 as the original value is not affected when passed by reference, just a copy which is destroyed after the function exits.
cout << b << endl; // outputs 1 as func2 passes by reference, changing the original
return 0;
}