深入學習陣列

2022-05-06 04:33:11 字數 1215 閱讀 1413

深入學習一下陣列

從記憶體角度來理解陣列

(1)從內在角度講,陣列變數就是一次分配多個變數,而且這多個變數在記憶體中的儲存單元是次相連線的。

(2)我們分開定義多個變數(譬如inta,b,c,d;)和一次定義乙個陣列(int a[4]) ;這兩種定義方法相同點是都定義了4個int型變星, 而且這4個變星都是獨立的單個使用的;

從編譯器角度來理解陣列

(1)從編譯器角度來講,陣列變數也是變數,和普通變數和指標變數並沒有本質不同。變數的質就是乙個位址,這個位址在編譯器中決定具體數值,縣體數值和變數名繫結,變數型別決定個位址的延續長度。

(2)搞清楚:變數、變數名、變數型別這三個概念的具體含義,很多問題都清楚了。int a;  char a;

陣列中幾個關鍵符號(a  a[0]  &a  &a[0])的理解 (前提是int a[10])

(1)這4個符號搞清楚了,陣列相關的很多問題都有答案了。理解這些符號的時候要和左值右值結合起來,也就是搞清楚每個符號分別做左值和右值時的不同含義。

(2)a就是陣列名。a做左值時表示整個陣列的所有空間(10x4=40位元組) ,又因為c語言規定陣列操作時要獨立單個操作,不能整體運算元組,所以a不能做左值; a做右值表示陣列首元素(陣列的第0個元素,也就是a[0])的首位址(首位址就是起始位址,就是4個位元組中最開始第乙個位元組的位址)。a做右值等同於&a[0];

(3)a[0]表示陣列的首元素,也就是陣列的第0個元素。 做左值時表示陣列第0個元素對應的記憶體空間(連續4位元組);表示陣列第0個元素的值(也就是陣列第0個元素對應的內仔空間中儲存的那個數)

(4)&a就是陣列名取位址,字面意思來看就應該是陣列的位址。&a不能做左值(&a實質是乙個常量,不是變數因此不能賦值,所以自然不能做左值);&a做右值時表示整個陣列的首位址。

(5)&a[0]字面意思就是陣列第0個元素的首位址(搞清楚[  ]和&的優先順序,[  ]的優先順序要高於&,所以a先和[  ]結合起來再取位址) ,做左值時表示陣列首元素對應的記憶體空間,做右值時表示陣列首元素的值(也就是陣列首元素對應的記憶體空間中儲存的那個數值)。做右值時&a[0]等同於a。

總結:1: &a和a做右值時的區別: &a是整個陣列的首位址,而a是陣列首元素的首位址。這兩個在數值上是相等的,但是意義不相同,意義不相同會導致他們在參與運算的時侯有不同的表現。

2: a和&a[0]做右值時意義和數值完全相同,完全可以互相替代。

3: &a是常量,不能做左值。

4: a做左值代表整個陣列所有空間,所以a不能做左值。

陣列的深入學習

在以前的學習中,對陣列的認識只是簡單的陣列形式,儲存數,但深入學習其實現機理,發現大有文章,下面簡單表述一下 一 陣列是乙個型別,這個從陣列的定義說起 陣列的定義有兩種方式 以int為例,1.int a 2.int a 第一種定義方法是很多人習慣的,主要是早期的影響,第二種方法才是最適合的定義方法,...

PHP陣列深入學習

首先,php的陣列是鍵值對,不像python或者有些語言,陣列的索引是自增的,php的陣列沒有索引,是鍵,這樣就和有些語言中的字典很像。鍵 key 只能是整數或者字串,不能是別的資料型別 值 value 可以使任意型別的值,比如陣列,整數,浮點數什麼的。較老版本的寫法 array array a a...

linux shell陣列深入學習理解

本文為大家介紹linux shell陣列的相關知識,並提供了充足的例子供參考,這麼好的東東,千萬不要錯過 bash shell只支援一維陣列,但引數個數沒有限制。宣告乙個陣列 declare a array 其實不用宣告,按陣列方式直接賦值給變數即可,bash就知道那是陣列 陣列賦值 1 array...