二維數組

二維數組
一、二維數組的內存映像
(1)一維數組在內存中是連續分佈的多個內存單元組成的,而二維數組在內存中也是連續分佈的,由多個內存單元組成。
(2)從內存角度來看,一維數組和二維數組沒有本質差異。
(3)二維數組int a[2][5]和一維數組int b[10]其實沒有本質差異。咱們能夠把二者的同一單元的對應關係寫下來。
a[0][0]    a[0][1]    a[0][4]     a[1][1]     a[1][4]
b[0]       b[1]       b[5]        b[6]        b[9]
(4)既然二維數組均可以用一維數組來表示,那麼二維數組存在的意義和價值在哪裏?
二維數組和一維數組在內存使用效率、訪問效率上是徹底同樣的。在某種狀況下使用二維數組而不使用一維數組的緣由在
於二維數組好理解、代碼好寫、利於組織。
(5)總結:咱們使用二維數組(C語言也提供二維數組),並非必須,而是一種簡化編程的方式。其實一維數組的出現
其實也不是必然的,也是爲了簡化編程。
二、哪一個是第一維,哪一個是第二維?
(1)二維數組int a[2][5]中,2是第一維,5是第二維。
(2)結合內存映像來理解二維數組的的第一維和第二維的意義。首先第一維是最外邊一層的數組,因此int [2][5]這個數
組有兩個元素;其中每個元素又是一個含有5個元素的數組(這個數組是第二維)。
(3)總結:二維數組的第一維是最外部的那一層,第一維自己是個數組,這個數組存儲的元素也是一個數組;二維數組的
第二維是裏邊的那一層,第二維自己是個數組,這個數組中存的元素是普通元素,第二維這個數組自己做爲元素存儲在第一
維的數組中。
三、二維數組的下標式訪問和指針式訪問
(1)一維數組的兩種訪問方式:以int b[10]爲例,int *p = b;
b[0]等同於*(p + 0);   b[9]等同於*(p + 9);   b[i]等同於*(p + i);
(2)二維數組的兩種訪問方式:以int [2][5]爲例,(合適類型的)p = a;
a[0][0]等同於*(*(p + 0) + 0);   a[i][j]等同於*(*(p + i) + j);
四、二維數組的定義方式
第一種:int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};
第二種:int a[2][5] = {1,2,3,4,5,6,7,8,9,10};
int *p = a;//編譯器會報錯的,由於類型不匹配編程

相關文章
相關標籤/搜索