the * itself isnt a pointer, you have declared
int * blah;
which means that the variable blah is the pointer. The pointer points to the parameter. When you called that function instead of passing an integer, you passed a reference (ie you passed the address of where an integer is stored).
This means that in the original switch statement, it was trying to switch a reference, or an address, which it cant do. When you use the pointer, it tries to switch the data that the pointer is pointing to. The pointer is pointing at that address, so it takes its (integer) value, which can then be switched
I really hope that made some sense, im in a big rush right now =/
by the way though, it didnt even compile at all for me when i tried it oO