//typedef和const联用的时候,const限定的是一个类型整体的常量性,如:typedef char* PSTR
//const PSTR相当于char *const 而非 const char*
//typedef也是一种存储类型限定符,所以typedef static int SINT是错误的
//参考http://zhidao.baidu.com/question/58789595.html
//int常量类型的别名可以是任意int常量或者int变量的别名,它总是把别名的目标当作一个int常量。
//如果是一个int变量的别名,则b是不能改变的,但是a本身都可以改变。
int a=10;
const int &b=a; //right
//b++; //wrong!
int const &bb=a; //right
//bb++; //wrong!
int &const bbb = a; //warning这里提到引用前的任何修饰将被忽略掉
bbb++;
//b=a; //wrong!因为const类型无法被赋值
int d=1;
const int c=20;
d=c; //right!这里只是值复制而已
//int &m=c; //error!因为无法把一个int常量视为一个变量来操作
//参考http://zhidao.baidu.com/question/364691260.html
//int常量类型的指针可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。
//如果指向一个int变量,则*p1是不能改变的,但是p1本身和a本身都可以改变。
int const *p1 = &a; //和const int *a等价
a++; //right
p1++; //right
//(*p1)++; //wrong!
//指向int类型的指针常量和指向int常量类型的指针常量
const int mm=0; //必须初始化
const int *const p2 = &mm; //p2必须初始化
//mm++; //wrong!
//p2++; //wrong!
//int *const p3=&mm; //wrong!
//int *p4 = &mm; //wrong!
int test=0;
int *pt1=&test;
int const *pt2;
//pt1=pt2;
pt2=pt1;