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

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.