@如何通俗理解指標陣列與陣列指標
來自c語言小白的摸索經歷和總結
首先,在介紹兩個概念之前,我們先來看一條基礎語句int a = 5
,即在記憶體中存放元素 5 這個值,我們可以用下面這幅來簡單理解這個過程。
在搞清楚這個問題後,我們再來看下一條語句int*p = &a
首先我們要清楚 p 是乙個指標型別的變數,而指標型別的變數中存放的是乙個位址值,也就是說p = &a
,我們可以用下圖來表示這條語句的意思。
接下來,步入正題
根據上文我們可以得出 p[n] 是乙個指標型別的變數,因此,p[n] 的每乙個元素都為乙個整形的指標變數,即 p[n] 的每乙個元素都為乙個整形的變數的位址。
用圖表來直觀表示:
也就是p[0]=&a , p[1]=&b
…
我們可以用下圖來表示上述語句段的意思:
又如下列輸出字串的指標陣列:
首先對於字串,其可以看作存放字元的一維陣列,即:
對於陣列,我們知道,陣列名即為陣列的首位址,於是我們可以把上述三個字串(即三個一維陣列)用陣列名來表示,因為輸出陣列名就可以實現輸出字串,如下圖
其中 x , y , z 為三個一維陣列的陣列名,即為首位址。
因此,指標陣列便指向了三個一維陣列,即p[0]=x , p[1]=y , p[2]=z
用圖直觀的表示出來如下:
於是我們如果要輸出字串,列印 p[0] , p[1] , p[2] 即可。
寫到這裡小白筆者忽然想起來,定義二維字串陣列的通常形式:
char string3[6][30]=;
此句表示有6個字串,每個字串的長度為30,每個字串的初始值與「joy",「phosee」,「monses」,「chandele」,「ross」,"rather"相對應。
指標陣列輸出字串的定義形式對比,不知道大家有沒有發現,陣列的乙個 " [ ] " 就相當於指標裡面的乙個 * ,乙個 " [ ] " 就代表解一次位址,這樣理解對於二維陣列和二維陣列指標方面非常有益。
陣列指標,顧名思義就是指向陣列的指標,要注意的是,陣列指標指向的是陣列,而不是陣列中的某個元素(這個意思會在後文用直觀圖表示出來),儘管陣列位址與首元素位址相同,但是也千萬不能混淆。舉個例子,就像是1班和2班兩列縱隊排好,一班排頭的人的位置和一班位置是相同的,但是兩個僅僅是在數值上的相等,實際意義是不同的。
以下舉兩個例子,實現列印一維陣列所有元素。
①當我們先定義乙個一維陣列,然後用整型指標指向它,此方法為一般的我們運用指標輸出陣列勻元素的方法。
②而定義陣列指標,情況就不一樣了
為了能更加直觀形象地理解兩者的區別,我們用下圖來表現出來
1、 陣列指標就是把整個陣列看成乙個「 整體 」,其中 (p)[n] 中的 n 決定了它的跨度,也就是如果 p2 +1 ,那麼它將在記憶體空間中移動多少位元組,如 int(*p)[5] ,那麼p2 +1 相對於 p2 所指的位址,移動了 sizeof(int)*5 個位元組。
2、 跨度概念會在二維陣列中涉及,這就是為什麼強調不要混淆的原因,因為在一維陣列範圍內相關的結果湊巧是一樣的但是在二維陣列中就完全不同了。
注:以上內容為筆者在學習相關概念過程中的一點小小的體會,寫下來希望能幫助到更多的人加深理解,因為對csdn編輯器的使用不太熟悉,所以**以及圖都是手工完成的,(希望別被大佬嫌棄),如有不妥之處懇請指教並基於訂正,謝謝❤
陣列指標與指標陣列的理解
在進行閱讀yolo原始碼的時候,由於其都是用c寫的,在指標方面,遇到了很多問題,現在就問題,對c進行更深的理解。1.c當中的strcpy與strcat函式的區別 字串處理strcpy,strcat函式的用法 1 strcat是用來連線兩個字串的,原型是char strcat char dest,ch...
指標陣列與陣列指標的理解
指標陣列與陣列指標是十分繞口的,也不容易記憶,想要知道它是什麼?就看它後面是什麼詞!指標陣列 指標陣列後面的詞就是陣列,所以它就是陣列,而陣列裡面放的是指向這個型別的指標 陣列指標 陣列指標後面的詞是指標,則它就是個指標。在知道指標陣列和陣列指標字面的意思之後,我們就要解決遇到的表示式是指標陣列還是...
陣列指標 指標陣列 二維陣列如何理解與使用
首先它是乙個指標,它指向乙個陣列,在32位系統下任何型別的指標所佔記憶體大小都為4個位元組,至於它指向的陣列佔多少位元組,具體要看陣列的大小。總之,陣列指標即為 指向陣列的大小 例如 int p 4 定義了乙個陣列指標,該指標變數儲存的是乙個陣列的首位址,它可以指向乙個含有4個整型元素的陣列。1 對...