If the pointer points to non existant memory, protected memory, out of bounds memory, NULL, etc... the function will crash the application, or just cause corruption.
Actually there is some history I believe in place here. Before C++ is invented, C programmers will use pointer to effect changes on the variables they intend to have before call and then after call a function. Then C++ came along and they introduce reference variables. Actually I would strongly recommend this way but in order to enable C code to run seam-lessly, C++ also accept the pointer notation from the C days.
Generally, for new C++ code I will use reference variables. It is only for legacy code maintenance or the API I am calling uses old C pointer notation would I use pointer variables.