指针和const一些注意事项

1、常量指针(底层const)

指向常量的指针,指针所指向的对象的值无法被修改,若想存放常量对象的地址,只能使用指向常量的指针。

2、指针常量(顶层const)

指针本身是常量,指针本身的值不可修改。

1 int i=02 int *const pi=&i;    //指针常量pi一直指向i
3 const double dp=3.1415;
4 const double *const dp1=&dp;//dp1是一个指向常量对象的指针常量

 注意:1)一般来说,顶层const可以表示任意对象是常量,而底层const一般与指针或者引用等复合数据类型的基本类型部分有关。

    2)指针也可以是顶层const,也可以是底层const,这个与其他类型有较大区别。

    3)用于声明引用的const都是底层引用。

    4)当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两者的数据类型能够相互转换(针对的是具有顶层或者底层区别的指针或者引用)。

    5)引用只有底层const这种说法,即绑定的对象是常量,而顶层底层const只对指针来说。

3、指针、常量和类型别名

假设声明一个pstring,来作为char *的别名:

1 typedef char* pstring;
2 const pstring cstr=0;
3 const pstring *ps;

注意:1)不能将本来的char* 代到2、3行中变成:const char* cstr=0;  const char* *ps;  这样的意思是定义一个指向常量的指针常量,然而这样是错的。

    2)当类型别名与指针、常量一起使用时,要小心,应当将pstring看成一个整体,即一个指向char的指针,而const是用来修饰这个整体的,所以上面2、3行代码分别是:一个指向char的指针常量  一个指向char的指针常量的指针

原文地址:https://www.cnblogs.com/Dark-King/p/9360845.html