The main drawback is that they're a bit more difficult to use than references. references always point to valid data, but pointers may be null or may point to arbitrary data, including other pointers. the programmer is therefore entirely responsible for ensuring their pointers point at valid data before they can actually use that data; the compiler is not able to foretell the runtime condition of a pointer.