Just replying for future readers.
The fundamental types are pretty much what AllJonasNeeds listed. Bool, int, float, char. The one other type I can think of for not bothering to pass by reference is an enum; they’re also a very small data type. Everything else, use a reference. As AllJonasNeeds mentioned, use a const reference when possible so the function can use it, but not change it.
I’m not sure why Doug has said that pointers and references are one in the same. In the case of this question, and in pretty much any case, using the right one will work and using the wrong one will always not-work. They serve similar purposes but are definitely two different things. As AllJonasNeeds had suggested when he first asked, when it comes to calling a function you use whichever the function demands.
When it comes to writing a function, use a reference wherever humanly possible. Only use a pointer if you have no other choice, and even then, smart pointers should be used, not raw pointers (though I don’t know how well UE4 plays with smart pointers). References have bug-avoiding restrictions that pointers do not have, and pointer-related bugs are often notoriously irritating.
Further explanation would go a bit beyond the question’s scope, so the tl;dr is simply don’t use pointers unless you know you have to.