程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 徹底搞定C語言指針 第三篇

徹底搞定C語言指針 第三篇

編輯:關於C語言

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上實驗。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved