指针常量和常量指针

来源:互联网 发布:练书法的好处知乎 编辑:程序博客网 时间:2024/06/05 18:42

*象征着地址,const象征着内容;谁在前面谁就不允许改变。读的时候:从右向左读

int a =3;  int b = 1;  int c = 2;  int const *p1 = &b;//const 在前,定义为指向常量的指针int *const p2 = &c;//*在前,定义为常来那个指针

指向常量的的指针p1:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。
p1 = &a是正确的,但 *p1 = a是错误的。

常量指针p2:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
p2= &a是错误的,而*p2 = a 是正确的。

指向常量的指针
  不能用于改变其所指对象的值。要想存放常量对象的指针,只能使用指向常量的指针。
  

const double pi = 3.14double *ptr = π      //错误:ptr是一个普通指针const double *ptr = π        *cptr = 42;             //不能给*cptr赋值

  指针的类型必须与其所指对象的类型一致,但有两个例外,第一例外时:允许一个指向常量的指针指向一个非常量的对象。所谓指向常量的指针仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其他途径改变。
const指针(常量指针)
  常量指针必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中的那个地址)不能再改变了。
  指针本省是一个常量并不意味着不能通过指针修改其所指对象的值。