浅谈常量指针与指针常量(四)

2014-07-19 22:53:02 · 作者: · 浏览: 208

 

  最后总结两句:

  1) 如果const 修饰在*pi前则不能改的是*pi(即不能类似这样:*pi=50;赋值)而不是指pi.

  2) 如果const 是直接写在pi前则pi不能改(即不能类似这样:pi=&i;赋值)。

  补充三种情况。

  这里,我再补充以下三种情况。其实只要上面的语义搞清楚了,这三种情况也就已经被包含了。不过作为三种具体的形式,我还是简单提一下吧!

  情况一:int * pi指针指向const int i常量的情况

  //**********begin*****************

  const int i1=40;//定义了一个整型常量i1。

  int *pi; //定义了一个指针pi。

  pi=&i1;//这样可以吗 不行,VC下是编译错。

  //const int 类型的i1的地址是不能赋值给指向int 类型地址的指针pi的。否则pi岂不是能修改i1的值了吗!

  pi=(int* ) &i1; // 这样可以吗 强制类型转换可是C所支持的。

  //VC下编译通过,但是仍不能通过*pi=80来修改i1的值。去试试吧!看看具体的怎样。

  //***********end***************

  情况二:const int * pi指针指向const int i1的情况

  //*********begin****************

  const int i1=40;

  const int * pi;//定义常量指针

  pi=&i1;//两个类型相同,可以这样赋值。很显然,i1的值无论是通过pi还是i1都不能修改的。

  //*********end*****************

  情况三:用const int * const pi申明的指针

  //***********begin****************

  int i

  const int * const pi=&i;//你能想象pi能够作什么操作吗 pi值不能改,也不能通过pi修改i的值。因为不管是*pi还是pi都是const的。

  //************end****************