c++ 常量指针定义

如下两种定义方式,输出结果一样,那常量指针定义区别是什么?

const int *cp1=&j;
int *const cp2=&j;
cout << *cp1 << *cp2 <<endl;
j=200;
cout << *cp1 << *cp2 <<endl;

第一个表示指针指向的数据不能修改,指针本身可以修改,即cp1 = &XXX; 而*cp1 = XXX;错误。
第二个与第一个刚好反过来,指针本身不能修改,但是可以修改指针指向的数据,即*cp1 = XXX;而cp1 = &XXX错误。