C語言學習筆記(7)

來源:互聯網
上載者:User

1. 指標和數組

這個在最初學習C語言時就學過了,在此只是簡單提下。看一段代碼:

#define SIZE 10
int main (void)
{
int a[SIZE],*p,sum;
int i;
p=a;
sum=0;
for(i =0;i<SIZE;i++)
{
a[i]=i+1;
}
for(;p<&a[SIZE];p++)
{
sum+=*p;
}
printf("%d",sum);
}

很簡單的一段代碼,就是通過指標來訪問數組元素,在此只提一點,就是&a[SIZE],雖然a[SIZE]不存在,數組的最後一個元素時a[SIZE-1],但是C編譯器不會對下標進行越界檢查,也就是說a[SIZE]一樣可以訪問,所以我們可以用這樣的方式來終止for迴圈。

另外,面對指標訪問數組還是下標訪問數組,都是圍繞著訪問效率來的。其實這依賴於不同編譯器的具體實現,在C標準中並無提及。

2. 指標與多維陣列

這個在我大學學C語言時,一直都沒有理解,不過現在看來比較容易了。

二維數組實際上在儲存上也是一段連續的記憶體空間,因此我們可以將二維數組當做一維數組來對待,如下面的代碼:

#define ROW 3
#define COL 5
int main (void)
{
int a[ROW][COL],*p,sum;
int i,j;
p=&a[0][0];
sum=0;
for(i =0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
a[i][j]=j+1;
}
}
while(p<=&a[ROW-1][COL-1])
{
sum+=*(p++);
}
printf("%d",sum);
}

但是這樣做看起來可讀性並不好,對於一些老編譯器來說這樣做的效率較高,可是對於現代編譯器來說已經沒有了這樣的優勢。

因此我們一般應該這樣來做,我們知道,對於二維數組來說,例如a[i][j] ,其實a[0]代表的就是第一行的首元素的地址。那麼我們就可以利用這個來訪問多維陣列元素:

#define ROW 3
#define COL 5
int main (void)
{
int a[ROW][COL],*p,sum;
int i,j;
sum=0;
for(i =0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
a[i][j]=j+1;
}
}
for(i=0;i<ROW;i++)
{
for(p=a[i];p<a[i]+COL;p++)
{
sum+=*p;
}
}
printf("%d",sum);
}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.