The first is a pointer to const int (the data cannot change); the second is a const pointer (it cannot be redirected) The first is a const pointer; the second is a pointer to const They are identical Both prevent all modification
A reference can be reassigned to another variable A reference can be null A reference must be initialized and cannot be reseated to refer to another object A reference always occupies more memory than a pointer
It frees memory automatically It can be dereferenced safely It is faster It has its own type (std::nullptr_t) and is never mistaken for an integer during overload resolution