Some people may be confused about the sequence of const and * on declaration in C++/C, me too.

  Now I think we can distinguish them by this way:

  1.only noticing the position of const to *, and we can find that the following statements are same:    

const int * foo_int;
int const * foo_int_;  //same.

  2.regarding const as a postpositive attributes,and you will know the content which is const.

  

int foo = 6;
int foo_ = 7;

//the foo_int is const, but the pointer to foo_int can be chaged.
int const * foo_int = &foo;

//illegal, the value cannot be chaged
//*foo_int = 7

//okay!
foo_int = &foo_;

//the pointer to int is const, but foo_int_ can be chaged.
int * const foo_int_ = &foo_int;

//illegal, the pointer cannot be changed.
//foo_int = &foo_int_;
//even if the new pointer is same, it's illegal
//foo_int = &foo_int;

//okay
*foo_int = 8;