迷糊的多維陣列的位址

2021-05-02 19:07:13 字數 1719 閱讀 4964

為什麼要寫這個?因為這個東西有點混亂,至少我第一次接觸的時候是這樣的。或許以後還會,所以記下來需要的人一起看吧。

直接上主題,我做事就是很直接,當然也會很囉嗦,下面你將會一併體驗到。

int count[2][3] = ,};

count //陣列count[0][0]的位址。

count+1//陣列count[0][0]行數的偏移量為1的位址,即count[1][0]的位址。

*(count+1)//等效於count+1。

*(count+1)+1//count[0][0]行數偏移量為1,列數偏移量為1的位址,即count[1][1]的位址。

**(count+1)//count[1][0]的值。注意這裡是2個「*」。

*(*(count+1)+1)//count[1][1]的值,這裡也可以寫成**(count+1)+1,結果都是一樣的,反正就是要2個「*」。說到這裡有的人可能就覺得奇怪了,上面不是說了「*(count+1)//等效於count+1」那*(*(count+1)+1)能不能寫成*((count+1)+1)呢?答案是很肯定的:不能。為什麼呢?我的理解是:如果單純地表示行位址的時候有無「*」都無所謂,反正是一行的位址,同時也是一行的第一列元素的位址。*(*(count+1)+1)含義是先取得第1行的位址,然後再在第1行內偏移1列後,取得位址所儲存的值4。如果寫成*((count+1)+1)則含義變成:行數偏移1後再偏移1後的位址。

這裡有點饒頭,多看幾次就會明白了。當然按照我的理解來看也是有一定風險的,因為我可能理解錯了。不過這些結果我都試驗過的,絕對不會錯的。

*(count+1)[1]//count[1][1]的值。首先用*(count+1)取得行位址,然後用[1]直接獲取這個位址中第1號元素的值。這個表示式等效於*(count[1]+1),同時也等效於*(*(count+1)+1)。~~撲通~~已經有人徹底暈倒了。這裡的「*(count+1)」,「count[1]」都是為了有效地進行行位址定位,因為只有先找到行位址才能進列定位嘛!

最後總結:

1.    如果你是想獲得多維陣列中一行的位址則使用不使用「*」都無所謂。前提是沒有「」出現。

2.    如果你是想獲得多維陣列中元素的位址則首先得確定好此元素的行位址(使用「*」,比如*(count+1)這樣就確定了是第1行的位址),然後再進行列偏移。

3.    如果你是想獲得多維陣列中元素的值,則可以在位址之前加「*」一般整個表示式是2個「*」,因為確定某一行的時候的那個「*」是必不可少的。當然也可以使用帶有「」的方式,這個方式裡面需乙個「*」和乙個「」就可以獲得陣列的值。如果你說使用count[1][1]這樣的方式不是更好麼?你說的一點都沒錯,不過我這裡主要討論的是與位址相關的內容。不過要順帶說一下如果使用雙「」的情況下表示式前加不加「*」都是無所謂的。

再一次總結:

1. 多維陣列的位址中,重點就是進行行位址定位,有2種方式,第一種:加「*」eg:*(count+1)。第二種:使用「」eg:count[1]。

這裡有乙個問題啊,* count[1]是位址還是值啊?如果你的回答是位址那請再回頭看一下最後總結第一條。這裡的* count[1]表示的是乙個值,因為這條語句的含義是取count[1]的值,可是count[1]只是乙個位址,只進行了行定位,偏要它交出乙個值出來,只好把列排名第一的第0個元素丟了出來,即count[1][0]。

學生朋友應付考試的總結:

1. 單個「*」或單個「」可以獲得位址;雙「*」或雙「」或乙個「*」加上乙個「」可以獲得陣列值。這樣的規律是不是很簡潔明瞭?

錯誤不足之處還請大家多多指正!謝謝!

多維陣列的位址轉換

多維陣列和廣義表是一種複雜的非線性結構,它們的邏輯特徵是 乙個資料元素可能有多個直接前驅和多個直接後繼。多維陣列 1 陣列 向量 常用資料型別 一維陣列 向量 是儲存於計算機的連續儲存空間中的多個具有統一型別的資料元素。同一陣列的不同元素通過不同的下標標識。a1,a2,an 2 二維陣列 二維陣列a...

C 位址連續的多維陣列實現

位址連續的二維陣列在c語言數值計算中有重要意義,很多二維陣列的演算法是基於一維陣列寫的。另外,在序列化時或記憶體複製時,連續空間易於進行整塊記憶體的操作。子程式說明 1 array2d和freearray2d可實現位址連續的動態二維陣列的位址分配和釋放。2 作為對照,給出了位址不連續的二維陣列位址分...

取多維陣列首位址的方法

include include int main void char a 1 1 char a 2 2 3 對一維陣列取首位址,有兩種方法 char pa a 第一種 char pa a 0 第二種 char pa a 0 0 取二維陣列首位址的方法 char pa a 0 0 0 取三維陣列首位址...