1.數組元素
看下面代碼
int i,a[]={3,4,5,6,7,3,7,4,4,6};
for (i=0;i<=9;i++)
{
printf ( “%d”, a[i] );
}
很顯然,它是顯示a 數組的各元素值。
我們還可以這樣訪問元素,如下
int i,a[]={3,4,5,6,7,3,7,4,4,6};
for (i=0;i<=9;i++)
{
printf ( “%d”, *(a+i) );
}
它的結果和作用完全一樣
2. 通過指針訪問數組元素
int i,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
pa =a ;//請注意數組名a直接賦值給指針 pa
for (i=0;i<=9;i++)
{
printf ( “%d”, pa[i] );
}
很顯然,它也是顯示a 數組的各元素值。
另外與數組名一樣也可如下:
int i,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
pa =a;
for (i=0;i<=9;i++)
{
printf ( “%d”, *(pa+i) );
}
看pa=a即數組名賦值給指針,以及通過數組名、指針對元素的訪問形式看,它們並沒有什麼區別,從 這裡可以看出數組名其實也就是指針。難道它們沒有任何區別?有,請繼續。
3. 數組名與指針變量的區別
請看下面的代碼:
int i,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
pa =a;
for (i=0;i<=9;i++)
{
printf ( “%d”, *pa );
pa++ ; //注意這裡,指針值被修改
}
可以看出,這段代碼也是將數組各元素值輸出。不過,你把{}中的pa改成a試試。你會發現程序編譯 出錯,不能成功。看來指針和數組名還是不同的。其實上面的指針是指針變量,而數組名只是一個指針 常量。這個代碼與上面的代碼不同的是,指針pa在整個循環中,其值是不斷遞增的,即指針值被修改了 。數組名是指針常量,其值是不能修改的,因此不能類似這樣操作: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上實驗。