c語言 一維陣列的理解 二維陣列的位址

2021-08-26 17:42:34 字數 1424 閱讀 6713

1.陣列名單獨放在括號裡面表示的是陣列的位址

2.對陣列名進行取位址取出來的是陣列的位址

對於一維陣列大家應該都很好理解!

比如:a[3] = ;

這個一維陣列a他裡面有三個元素,陣列名表示的是陣列的位址,特殊的是陣列的位址,和1

這個陣列元素的位址是一樣的但是意義卻不一樣。

有什麼不一樣呢?

對於陣列的位址加1的話跳過去的是整個陣列

而對第乙個元素加1的話跳過去的是乙個陣列元素

就對a這個陣列,假設a的位址為0x1000

&a + 1(陣列的位址加1) 0x1012

a + 1 (首元素的位址加1) 0x1004

sizeof(a)(a單獨放在括號內部,表示整個陣列的位址) 求出來所佔記憶體大小為12

sizeof (a + 1)(表示第二個元素的位址(即2的位址)) 求出來大小為4

這就是陣列的位址和首元素的位址的區別

對於一維陣列傳參的話,傳過去的是陣列名,也就是首元素的位址,需要用乙個一級指標來進行接收,或者採用一維陣列來接收也可以,但是要記住陣列傳參傳的是陣列首元素的位址,是乙個位址即使你採用一維陣列來進行接收,也只是陣列的位址賦給這個一維陣列,而不是將整個陣列傳過來。

這是為什麼?陣列傳參傳的的是位址,而不是整個陣列

原因很簡單:陣列在進行傳參是,是開闢臨時棧來接收的如果傳的是整個陣列的話,那麼需要壓棧的元素太多,位元組太大有可能導致,棧溢位,所以一般傳參傳的都是陣列首元素的位址。

接下來說一下二維陣列:

對於二維陣列在記憶體中儲存的時候是採用行主序來進行儲存的。所以二維陣列儲存下來不像是自己腦海中想象的幾行幾列,實際上也是一行而已。

例:a[3][4] = , , }

這個陣列在記憶體中儲存是這樣的:

是一行來進行儲存的。位址空間是連續的(4和5的位址,8和9的位址都是連續的)。

可以看到這個儲存就像是三個一位陣列來進行儲存。

實際上二維陣列就相當於是三個資料元素,只不過這三個資料元素又都是一維陣列而已。

所以二維陣列的陣列名就相當於是乙個一維陣列指標。

因為陣列名陣列首元素的位址,而二維陣列的首元素是乙個一維陣列,則這個首元素的位址就是一維陣列的位址。也就是乙個陣列指標。

對於這個指標進行解引用得到的就是乙個一維陣列。此時這個指標就是這個一維陣列的陣列名了。

所以對於二維陣列傳參的時候傳的是陣列名,接受的時候要用乙個陣列指標來進行接收這個引數,因為傳過來的是陣列首元素的位址,而二維陣列的首元素就是乙個一維陣列。

C語言 一維陣列和二維陣列

1.解析一維陣列的建立和初始化 建立 建立一維陣列時,需有陣列型別,陣列名,以及陣列的大小 可有可無,若沒有大小則在初始化時,根據初始化的內容自動分配 初始化 陣列在使用前必須明確陣列的元素已經被賦予確定的值。初始化可以有以下兩種方法 1 在陣列定義時就賦給陣列確定的值 2 先給陣列乙個宣告,然後用...

C語言 一維陣列與二維陣列

int arr 4 定義了乙個一維陣列,長度為4 說明以下三個分別是什麼型別 1 arr 型別為int 表示陣列元素首位址,即圖中箭頭指向的位置。2 arr 1 型別為int 表示陣列元素首位址 1,即圖中箭頭指向的位置。3 arr 0 型別為int 表示第乙個元素,即圖中紅色的格仔。int brr...

C語言二維陣列專題 理解二維陣列名

int array 2 2 這個二維陣列裡包含了兩個一維陣列,分別是,這個好理解,但是對於array和array 1這兩種寫法,該怎麼理解呢?這篇文章我就說說我自己的心得吧。include 編譯器名 tdm gcc 4.9.2 32 bit release 執行平台 windows xp 32bit...