C語言二維陣列超細講解

2022-08-30 03:30:16 字數 3456 閱讀 9422

用一維陣列處理二維**,實際是可行的,但是會很複雜,特別是遇到二維**的輸入、處理和輸出。

在你絞盡腦汁的時候,二維陣列(一維陣列的大哥)像電視劇集裡救美的英雄一樣顯現在你的面前,初識陣列的朋友們還等什麼呢?讓我們認識一下這位武功高強的大哥吧!

聰明的你一定能夠顧名思義了吧,簡單舉個例子:array [2] [3]

array 是陣列名,後面的兩個方括號內分別放行下標列下標,這裡的行下標和列下標就是所謂的雙下標

這裡的下標規則和一維陣列的下標規則一模一樣:

1)可以是正的整形變數:

eg:array [2] [3];

(2)可以是字元常量:

eg:array [『a』] [『b』] = array [65] [66];(不清楚字元常量的同學可以點選:

(3)可以是有確定值的表示式:

eg:array [i+1] [j+2]、array [ a[1] ] [ a[2] ];

總而言之,這裡的下標分別表示行數列數

接下來和小編一起感受一下雙下標變數的威力。

上下標變數可以使方程組的計算更簡單,比如:

計算乙個二元一次線性方程組:

$$\left\7*x_-4*x_=7\\-2*x_+3*x_=-1\end\right.$$

它的一般表示式為:

$$\left\a11*x1+a12*x2=b1\\a21*x1+a22*x2=b2\end\right.$$

我們可以寫出乙個該方程組的增廣矩陣:

$$\begina11& a12& b1\\a21& a22& b2\end$$

運用克拉默法則可得:

$$x1=(b1*a22-b2*a12)/(a11*a22-a21*a12)$$

$$x2=(a11*b2-a21*b1)/(a11*a22-a21*a12)$$

因為矩陣的本質其實就是二維數表,我們可以用二維陣列來表示這個方程組的係數。

我們先定義乙個二維數表:a[2][2],和乙個一維數表:b[2]

那麼a11可以寫成:a[0][0],a12可以寫成 a[0][1],a21,a22同理。則:

$$x1=(b[0]*a[1][1]-b[1]*a[0][1])/(a[0][0]*a[1][1]-a[1][0]*a[0][1])$$

x2道理一樣。

所以,通過雙下標變數,我們只需要為a[i][j],b[i]中的元素賦值,便可以輕鬆解決方程組的問題。

另外,通過雙下標變數來表示一張二維數表,使下標變數的行列下標正好與資料在**中的位置相對應,形象直觀地反映了二維**。

很簡單,由雙下標變數定義的陣列就稱為二維陣列,雙下標變數就是陣列的元素。

二維陣列定義的一般形式和一維陣列大同小異,只是下表中的常量表示式多了乙個(維度加一):

《型別識別符號》 《陣列名識別符號》 [《常量表示式》] [《常量表示式》]
例如:float a [3] [4],b [5] [6];

這裡的float表示二維陣列中元素的型別是單精度浮點型,a、b就是給陣列取的名字。

注意:a [3] [4] 千萬千萬不要寫成 a [3 , 4] !

上面我們把二維陣列理解成二維圖表,我們也可以將二維陣列看成元素是一維陣列的一維陣列,將維數降低。

比如 a [3] [4],我們可以把a看成乙個一維陣列,裡面有三個元素:a [0]、a [1]、a[2],每個元素又包含4個元素:

a [0]

a [0] [1]

a [0] [2]

a [0] [3]

a [0] [4]

a [1]

a [1] [1]

a [1] [2]

a [1] [3]

a [1] [4]

a [2]

a [2] [1]

a [2] [2]

a [2] [3]

a [2] [4]

這種理解方法在資料初始化和用指標表示時顯得很方便。

在c語言中,二維陣列中元素排列的順序是按行存放的,就是說先排列第一行的資料,再排列下第二行的資料,以此類推。如圖:

陣列元素可以出現在表示式中也可以被賦值,例如:b[1] [2] = a [1] [3] / 2。

小編在這裡想提醒一下:要嚴格區分定義陣列時用的 a [5] [6] 和引用元素時的 a [5] [6] 的區別哦!

對二維陣列的初始化有一下幾種辦法:

(1)分行給二維陣列賦值

這個方法用到了我們前面講的對二維陣列的降維理解,比如:

int a [2] [3] = , };
此語句先將第一行元素依次賦值為:1、2、3,然後將第二行元素賦值為:4、5、6,因此說是按行賦值。

(2) 可以只有乙個花括號,按二維陣列元素的排列順序對各元素依次賦值

比如:

int a [2] [3] = ;
(3)對部分元素賦初值

int a [2] [3] = , };
此語句表示只給第一行第乙個元素賦值為2,第二行第乙個元素賦值為4,而其他元素都為0。

int a [2] [3] = };
此語句表示只給第一行三個元素分別賦值為:1、2、3。

int a [2] [3] = ,};
此語句表示只給第二行三個元素分別賦值為:1、2、3。

4)定義陣列時對第一維的長度可以不定義,但必須定義第二維的長度

例:

int a  [3] = ;
系統會根據輸入的總個數分配儲存空間,易知這個二維陣列有二行;

再如:

有關二維陣列的知識就講到這裡啦,歡迎小夥伴來交流哦!

預告:二維陣列的應用

2020-04-21 

17:26:54

C語言二維陣列

int main int argc,const char argv int array 5 建立乙個二維陣列 型別修飾符陣列名 包含幾個小陣列 每個小陣列有多少個元素 初始值如何寫?int array 3 4 一維陣列可以省略元素個數,二維陣列只能省略第一位 第乙個 3 可以不寫 第二種初始值寫法 ...

C語言 二維陣列

c語言之二維陣列 1 定義的基本格式 int a 1 2 1代表一行,2代表二列 難點 二維陣列的行列下標。字串結束標誌的實用。2 一維陣列和二維陣列的聯絡。一維陣列如同千層面一樣一層一層的,而二維陣列,只是給千層面切了幾刀 3 int a 2 3 a 0 0 是1,a 0 1 是2,a 0 2 是...

C語言 二維陣列

1 陣列名稱不可以代表儲存區 2 陣列名稱可以代表陣列裡第乙個儲存區的位址 3 可以對陣列名稱進行sizeof計算,結果是陣列裡所有儲存區的總大小 4 c99規範裡可以使用變長陣列,宣告變長陣列的時候可以用變數表示陣列裡的儲存區個數 5 某一次程式執行過程中變長陣列裡儲存區個數不會變化 6 如果程式...