陣列和指標的區別

2021-07-25 07:06:21 字數 764 閱讀 3460

指標和陣列的區別主要體現在如下幾個方面:

1.空間分配

陣列分配空間時是靜態分配,你定義多大的陣列就分配多大的空間,並自動分配一片連續的記憶體空間; 

指標變數本身是分配4位元組的空間,但是指標可以結合malloc,calloc,realloc等函式動態分配空間,通過指標來訪問由這些函式分配的記憶體空間。 

所以從這點上看,指標的空間利用率要高於陣列。

2.訪問效率

陣列通過下標直接訪問,雖然訪問效率高於指標,但靈活性差; 

指標通過位址找到對應的記憶體單元,再訪問對應的記憶體單元,屬於間接訪問,訪問效率低於陣列,但是靈活性高。

3.安全性

從安全性上來說,陣列安全性要高於指標。 

c語言是不做陣列的越界檢查的,因此陣列訪問時,可能會出現陣列越界訪問的問題,就是訪問了陣列以外的記憶體單元; 

指標訪問空間時,當程式設計師對指標理解不透徹時,易出現野指標的問題,造成記憶體洩露。

4.函式形參

陣列名做實參時可用指標作為函式形參來接。一維陣列名作實參,用元素的指標來接;二維陣列名做實參,用一維陣列指標來接;三維陣列名做實參傳遞時,用二維陣列指標來接;指標陣列名作實參傳遞時,用二維指標來接。

那麼問題來了,c語言為什麼要提出指標? 

1.c的特點是能夠直接訪問硬體,c語言提出指標使得c語言能夠直接訪問位址; 

2.指標動態分配空間,空間利用率高; 

3.指標相比於陣列訪問空間更加靈活,陣列只能通過下標訪問,指標你給我乙個位址我就能訪問,但是使用不注意容易出現野指標,造成記憶體洩露。

陣列指標和指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...

陣列指標和指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...

陣列指標和指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...