请你务必先记住这两点,相信你一定不会再被它们给搞糊了。现在再看这两个声明语句int const *pi和int *const pi时,呵呵,你会头昏脑胀还是很轻松惬意?它们各自声明的pi分别能修改什么,不能修改什么?再思考下这些问题。
补充三种情况
这里,我再补充以下三种情况。其实只要上面的语义搞清楚了,这三种情况也就已经被包含了。不过作为三种具体的形式,我还是简单提一下吧。
情况一:int *pi指针指向const int i常量的情况
#include "stdio.h"
main()
{
/* begin */
const int i1 = 40;
int *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的情况
#include "stdio.h"
main()
{
/* begin */
const int i1=40;
const int * pi;
pi=&i1;/* 两个类型相同,可以这样赋值。很显然,i1的值无论是通过pi还是i1都不能修改的。 */
/* end */
}
情况三:用const int *const pi声明的指针
#include "stdio.h"
main()
{
/* begin */
int i;
const int * const pi=&i; /*你能想象pi能够作什么操作吗?pi值不能改,也不能通过pi修改i的值。因为不管是*pi还是pi都是const的。 */
/* end */
}
注:相关教程知识阅读请移步到C++教程频道。










