类似这样操作:a++。前面 4,5 节中 pa[i],*(pa+i)处,指针 pa 的值是使终没有改变。所以
变量指针 pa 与数组名 a 可以互换。
4. 申明指针常量
再请看下面的代码:
int i, a[]={3,4,5,6,7,3,7,4,4,6};
int * const pa=a;/*注意 const 的位置:不是 const int * pa*/
for (i=0;i<=9;i++)
{
printf ( “%d”, *pa );
pa++ ; /*注意这里,指针值被修改*/
}
这时候的代码能成功编译吗?不能。因为 pa 指针被定义为常量指针了。这时与数组名 a 已
经没有不同。这更说明了数组名就是常量指针。但是…
int * const a={3,4,5,6,7,3,7,4,4,6};/*不行*/
int a[]={3,4,5,6,7,3,7,4,4,6};/*可以,所以初始化数组时必定要这样。*/
以上都是在 VC6.0 上实验。
第 4 篇 const int * pi/int * const pi 的区别
1 从 const int i 说起
你知道我们申明一个变量时象这样 int i ;这个 i 是可能在它处重新变赋值的。如下:
int i=0;
//…
i=20;//这里重新赋值了
不过有一天我的程序可能需要这样一个变量(暂且称它变量),在申明时就赋一个初始
值。之后我的程序在其它任何处都不会再去重新对它赋值。那我又应该怎么办呢?用 const
。
//**************
const int ic =20;
//…
ic=40;//这样是不可以的,编译时是无法通过,因为我们不能对 const 修饰的 ic 重新赋值的。
//这样我们的程序就会更早更容易发现问题了。
//**************
有了 const 修饰的 ic 我们不称它为变量,而称符号常量,代表着 20 这个数。这就是 const
的作用。ic 是不能在它处重新赋新值了。
认识了 const 作用之后,另外,我们还要知道格式的写法。有两种:const int ic=20;与 int
const ic=20;。它们是完全相同的。这一点我们是要清楚。总之,你务必要记住 const 与 int
哪个写前都不影响语义。有了这个概念后,我们来看这两个家伙:const int * pi 与 int const
* pi ,按你的逻辑看,它们的语义有不同吗?呵呵,你只要记住一点, int 与 const 哪个放
前哪个放后都是一样的,就好比 const int ic;与 int const ic;一样。也就是说,它们是相同的。
好了,我们现在已经搞定一个“双包胎”的问题。那么 int * const pi 与前两个式子又有什么
不同呢?我下面就来具体分析它们的格式与语义吧!
2 const int * pi 的语义
我先来说说 const int * pi 是什么作用 (当然 int const * pi 也是一样的,前面我们说过,它