C++ - Why are pointers used so much?

So basically references are used when by value would be less efficient to copy, but cannot be null; and pointers are used when passing by value is inefficient and null is an option. Also should I use nullptr or NULL in the engine?