我相信很多人都跟我一樣被某些書害的不淺,在c語言中一直還把指標跟陣列名混為一談。其實它們跟本就是兩樣的東西,指標就是指標,陣列就是陣列,網上也有很多大牛作過很多非常深入的討論,但是個人感覺有時候把問題想得太複雜了反而不好,尤其是對於新手,因為我們新手很難搞懂編譯器揹著我們到底都幹了些什麼。我們有時候應該透過現象看本質,但有時候也不要太鑽牛角尖,一口吃不出個胖子,必要時「難得糊塗」,站在抽象的角度去看事情,很多所謂的「本質」歸根到底就是「規則」,讓我們返樸歸真看看標準是怎麼說的,對於新手關於陣列和指標的區別和以及什麼時候「相同」只要記住《c專家程式設計》中提到的三個標準和三個例外就可以了:
規則1."表示式中的陣列名被編譯器當作乙個指向該陣列第乙個元素的指標。"在下列的情況下,對陣列的引用不能用指向該陣列第乙個元素的指標來代替:規則2."下標總是與指標的偏移量相同。
規則3."在函式引數的宣告中,陣列名被編譯器當作指向該陣列的第乙個元素的指標。"
例外1.陣列作為sizeof()的運算元,顯然此時需要的是整個陣列的大小,而不是所指向第乙個元素的大小乙個很簡單的例子:例外2.使用&操作符取陣列的位址
例外3.陣列是乙個字串常量初始化值
#include char ga="abcdrfghik";
void method(char ca)//
or char *ca
int main(void
)
另外,
「陣列名被改寫成乙個指標的引數」規則並不是遞迴定義的。陣列的陣列會被改寫成「陣列的指標」而不是「指標的指標」比如char c[8][10]所被改寫對應的形參為 char (*)[10],為「陣列的指標」。
乙個簡單的例子:
#include #includemethod(
int a[3][2
]) }
for(i=0;i<=2;i++)
}int k=0
;
for(k=0;k<=5;k++)
}int main(void
),,};
method(a);
return0;
}
至於更深層的知識水到自然渠成。
陣列名和指標區別
前兩天同學問了我乙個問題 陣列名和指標有什麼區別,或者說這兩者有沒有區別?我回顧了下,大學課堂上老師講的,貌似記得老師說陣列名就相當於指標,比如 一維陣列就是一級指標 二維陣列是二級指標 之類的。結果同學告訴說原來我也是這麼理解的,其實 陣列名與指標有著本質的區別 然後給我推薦了一篇博文。我們經常見...
陣列名和指標的區別
魔幻陣列名 請看程式 本文程式在win32平台下編譯 1.include 2.int main int argc,char argv 3.size 3 1 陣列名不是指標 size 我們先來推翻 陣列名就是指標 的說法,用反證法。證明 陣列名不是指標 假設 陣列名是指標 則 pstr和str都是指標...
陣列名和指標的區別
引言 指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大 學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的開發,而身...