指標與陣列名異同比較總結

2021-06-26 09:06:21 字數 1799 閱讀 8112

首先用一句話來概括本文文意——指標只是指標,即儲存位址的變數;陣列名既有作為指標常量的特性,也具有作為陣列的不同於指標的特徵。

1、指標

想到指標就應當想到位址,記住一句話:「指標即位址」。指標是個用來儲存位址的變數,它與普通型別的變數唯一的不同就是它所儲存的內容是個位址,可以通過某種操作關聯到其它的記憶體空間,這種操作即為位址的間接引用。但是如果不對指標進行間接引用的操作的話,那麼,指標變數與普通的變數沒有任何不同,它所指向的記憶體空間也不會發生任何的改變。

例如上圖,宣告乙個字元型變數ch與指標ptr,並將ptr指向ch。可能很多同學都會跟我一樣,一想到指標就會想到它會指向某個地方,會對指標的操作格外小心翼翼,繼而會害怕去使用指標。這裡要謹記一句話——除非對指標進行間接引用操作,否則指標與它所指向的內容毫無瓜葛。這裡的關聯箭頭會給我們造成很多的誤導,總是直接將指標與它所指向的內容緊緊連在一起,所以如果只是對指標變數進行非間接引用操作,就不會對它所指向的內容造成任何改變。所以我們在使用指標的時候,一定要明了當前對其進行的操作時直接的還是間接的。

2、陣列

1)陣列名作為指標常量

陣列名有兩重身份,第乙個就是作為指標的身份。但是它是乙個特殊的指標,即是乙個指標常量。即宣告後不能對它的值進行任何的修改,它所存放的位址是陣列首個元素的位址。

2)陣列名作為陣列的特性

陣列名只有在兩種場合不作為乙個指標常量。第乙個就是作為sizeof操作符的運算元時。sizeof是計算乙個變數的空間大小,當陣列名作為sizeof操作符的運算元時,操作的結果是整個陣列的空間大小而非乙個指標常量的大小。第二個就是作為單目操作符&的運算元時。操作符&的作用是獲取其運算元的位址。當陣列名作為&的運算元時,獲取到的位址並不是乙個指標常量的位址,二是乙個指向陣列的位址。指向陣列的位址在《c與指標》中的多維陣列章節有非常詳細的描述。

3、指標與陣列名的異同

1)從宣告開始說起

編譯器在宣告乙個陣列時,其過程是根據所指定的陣列元素個數為陣列分配相應的記憶體空間,然後建立乙個指標常量,即陣列名,並用分配的記憶體空間的起始位址為其進行初始化。而在宣告乙個指標的時候,編譯器只為其分配相應儲存位址的空間,並不會分配任何其它的空間。

2)下標引用

記住一句話——下標引用是作用於任何指標,而僅僅是陣列名的。其實下標引用的過程是先取位址,在進行間接引用。如現在有指標char  *ptr與字元陣列char  ch[10]。在進行賦值ptr = ch;現在要取陣列中的第三個元素,可以採取的操作是:ptr[2]與ch[2]。唯一的不同是ptr是個普通指標,可以進行指標運算,而ch是個指標常量,其值無法改變,所以有一句話就是——下標絕不會比指標更有效率,但是指標有時會比下標更有效率,就是在計算具體位址的時候,如果ptr採取的是逐步後移,即每次ptr++,而ch只能是從ch[0]、ch[1]、、、,前者所做的指標運算只是每次加1,而後者可能會加較大的資料,這時候便需要進行乘法運算,計算具體的移位數量。具體案例在《c與指標》p145。

3)作為函式形參

其實陣列並不能作為形參,一般都是以指標作為形參來接受傳遞的陣列實參。而我們見過的陣列形參,它只是編譯器放行的一種形式,為了使人們比較容易理解,其它只是有陣列的外貌,其陣列名並不是真正的陣列名,也只是乙個普通的指標而已。所以可以對其值進行任何修改操作。這就是為什麼所謂的陣列形參可以接受任何長度的陣列實參的原因。使用這種方法,如果想要知道陣列的長度,需要顯示的進行傳遞。

因此

陣列名與指標

引言 指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的開發,而身邊...

陣列名與指標

include using namespace std int main int b 2 10 陣列名本身就是指標,再加上 就變成了雙指標,這裡的雙指標的就是指二維陣列 int p int a 1 p指向a陣列的第6個元素 雖然不存在 cout p 1 cout b 1 cout b 0 retur...

陣列名與指標

在本科畢業前,一直以為陣列名就是指標,但是最近看了一些技術文章和與一些技術大佬的討論,我開始迷茫了,在心裡一直有疑問,在本科寫程式的時候一直就拿陣列名當指標用啊,沒什麼問題啊,但是後來想了想,有了點靈感,就寫下來,不知道自己琢磨的是否通透,歡迎交流學習。首先說明陣列名為什麼不是指標 上例子 incl...