Generally spoken, declarations mimic usage --
const Node *p
declares something that can be changed (it is not const) and, when dereferenced (*p
), yields a type const Node
. By contrast, Node * const p
is something const (p
itself!) which cannot be changed and, when dereferenced, yields a value of a plain Node
which can very well be changed.