在應用陣列的過程中,我們都會使用到陣列名以及陣列名與下標結合使用的情況,所以在老師總結後,我在這裡總結一下這些情況。
首先在這裡展示一張我們的老師總結的一張圖,對下面的講解有一定的幫助理解作用。裡面有些東西比如像int *p,是一種指標型別的示意方式,請不要太過在意,只是一種示意而已,以下是該圖:
如圖,我們定義了乙個長度為4的一維陣列(這個只是舉例子,長度無所謂)
定義過程當然很簡單就是int arr[4];
arr有兩種用法:
第一種用法中,它代表的是整個陣列的長度(位元組長度),最為常見就是的用法就是以下兩種:
1.我們常用sizeof(arr)來求得整個陣列所佔的位元組長度;
2.我們常用&arr+1來表示整個陣列後面的乙個位元組的位址(當然其實到目前我自己還沒有這麼運用過)。
第二種用法就相當普遍了,這個arr用來表示陣列首元素的位址,也就是arr[0]的位址,所以也就是說arr實際上是乙個指標,由於示例是整型陣列,所以就是乙個整型的指標(當然這隨著陣列資料型別的改變而改變)。
我們已知arr是陣列首元素的位址,那麼我們給這個指標加一的意思就是說,我們把這個指標移向下一元素的位址上,那我們就可以很容易理解到arr+1是arr[1]的位址,所以可以由此可以說arr+1就是乙個指標變數。那我們可以由此可以推出arr+2是arr[2]的位址,arr+3是arr[3]是的位址……在乙個正整數n小於陣列長度下,arr+n是arr[n]的位址。
這個就不多說了,這個表示得是陣列0號儲存空間儲存的資料,由於本例子是乙個整型陣列,所以資料型別是整型,當然隨著資料型別變化而變化,這個具體情況具體分析了。
這個顯而易見類似於arr+1,arr[0]是整型,所以arr[0]+1就是表示1號儲存空間的資料,其實就等價於arr[1],當然也就是整型了,當然還是那句話,具體情況具體分析。
如圖,我們定義了乙個三行四列的二維陣列(這個只是舉例子,長度無所謂)
定義過程當然很簡單就是int brr[3][4];
由於前兩個概念需要使用到優先順序的概念,所以在這裡我把這張展示運算子優先順序的表先放在這裡:
在介紹之前,先區分兩個易於混淆的概念,我們由運算子優先順序可以知道的是在*的優先順序在()與之後所以不加小括號的情況下,p優先與結合,就是乙個陣列,我們平常對乙個指標變數的宣告的時候例如int *p;我們可以看到為了區分與普通變數區分的乙個星號,所以用乙個這樣的星號用在乙個陣列上則表示這是乙個指標陣列。那如果加了()代表什麼呢?由於優先順序,我們可以發現()內先與星號結合了,那麼根據平時乙個普通的指標變數的定義,這是乙個指標,接著()內的部分與結合,這表示這是乙個指向乙個長度為4的一維陣列的指標變數,注意的是,這是指向乙個陣列的指標,而不是指向陣列首位址的指標哦!
其實之前的介紹就是為接下來這些部分做鋪墊的。二維陣列名brr其實就是乙個指向乙個定長一維陣列的指標,我可以將這個三行四列的二維陣列看成三個一位陣列,就像第一張圖中表示的把二維陣列分成了紅藍綠三條一維陣列,而brr就是指向紅色一維陣列的指標了,也就是指向首行一維陣列的指標。
可以參照brr和arr+1,我們就可以知道,brr+1是指向下一行的一維陣列的指標,也就是指向藍色塊的一維陣列的指標了,當然以此類推,那麼brr+2就是指向綠色塊的一維陣列的指標了。所以推廣到任意的二維陣列,只要在不逾越行數的情況下,brr+n就是指向第n+1行(因為行標是從0開始)的一維陣列的指標。
陣列名加上乙個下標又變成了什麼呢?其實有點類似的是我們可以看到在圖的下方有乙個等式arr == brr[0]這個式子當然只是乙個助於理解的式子,其實意思就是說我們可以把brr[0]模擬於arr也就是一維陣列的陣列名,因為0是第一行的行標,所以brr[0]其實就是指向首行首元素的指標變數,那麼一次類推brr[n]就是指向n+1行的首元素的指標變數。
在brr[0]中我們可以將brr[0]模擬於arr,那麼我們也可以將brr[0]+1模擬於arr+1,也就是說這是乙個指向首行第二個元素的指標變數,以此類推,那麼brr[n]+n那麼這就是乙個指向第n+1行第n+1個元素的指標變數。
這個就不用多介紹了,模擬於arr[0]也就是首行首元素本身了,直接利用下標使用元素,是整型。
這就是全部的介紹了,多有疏漏,敬請批評指正!
陣列名和陣列名 二維陣列的傳參
首先我們看下面 include intmain printf p n arr printf p n arr printf arr 1 p n arr 1 printf arr 1 p n arr 1 return0 根據上面的 我們發現,其實 arr和arr,雖然值是一樣的,但是意義應該不一樣的。a...
sizeof 陣列名 及strlen(陣列名)
程式的輸出結果為 1 100 2 4 3 1 相當於a 100 這個數所佔的位元組大小,也就是乙個char位元組占得大小 當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。不論陣列a的容量是多少,sizeof a 始終等於sizeof char func char p int main ...
二維陣列和二維陣列名
對於一位陣列我們認識到其資料元素在記憶體中是按線性順序依次排列的,且一維陣列名的值是乙個指標常量。那麼二維陣列在記憶體中又是怎麼儲存的,其陣列名又有什麼含義呢?定義乙個二維陣列 int arr 3 4 我們可以將乙個二維陣列看做是乙個其中元素為陣列的乙個一位陣列,也就是說二維陣列第一維的元素實際上是...