C語言二維數組超細講解
用一維數組處理二維表格,實際是可行的,但是會很複雜,特別是遇到二維表格的輸入、處理和輸出。
在你絞盡腦汁的時候,二維數組(一維數組的大哥)像電視劇里救美的英雄一樣顯現在你的面前,初識數組的朋友們還等什麼呢?讓我們認識一下這位武功高強的大哥吧!
1. 雙下標變數
先來認識一下雙下標變數,聰明的你一定能夠顧名思義了吧,簡單舉個例子: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\{\begin{matrix}7*x_{1}-4*x_{2}=7\\-2*x_{1}+3*x_{2}=-1\end{matrix}\right.$$
它的一般表達式為:
$$\left\{\begin{matrix}a11*x1+a12*x2=b1\\a21*x1+a22*x2=b2\end{matrix}\right.$$
我們可以寫出一個該方程組的增廣矩陣:
$$\begin{pmatrix}a11& a12& b1\\a21& a22& b2\end{pmatrix}$$
運用克拉默法則可得:
$$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]中的元素賦值,便可以輕鬆解決方程組的問題。
另外,通過雙下標變數來表示一張二維數表,使下標變數的行列下標正好與數據在表格中的位置相對應,形象直觀地反映了二維表格。
2. 二維數組定義
很簡單,由雙下標變數組成的數組就稱為二維數組,雙下標變數就是數組的元素。
二維數組定義的一般形式和一維數組大同小異,只是下表中的常量表達式多了一個(維度加一):
<類型標識符> <數組名標識符> [<常量表達式>] [<常量表達式>]
例如: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] 的區別哦!
3. 二維數組的初始化
對二維數組的初始化有一下幾種辦法:
(1)分行給二維數組賦值
這個方法用到了我們前面講的對二維數組的降維理解,比如:
int a [2] [3] = {{1, 2, 3}, {4, 5, 6}};
此語句先將第一行元素依次賦值為:1、2、3,然後將第二行元素賦值為:4、5、6,因此說是按行賦值。
(2) 可以只有一個花括弧,按二維數組元素的排列順序對各元素依次賦值
比如:
int a [2] [3] = {1, 2, 3, 4, 5, 6};
(3)對部分元素賦初值
①
int a [2] [3] = {{2}, {4}};
此語句表示只給第一行第一個元素賦值為2,第二行第一個元素賦值為4,而其他元素都為0。
②
int a [2] [3] = {{1, 2, 3}};
此語句表示只給第一行三個元素分別賦值為:1、2、3。
③
int a [2] [3] = {{},{1, 2, 3}};
此語句表示只給第二行三個元素分別賦值為:1、2、3。
(4)定義數組時對第一維的長度可以不定義,但必須定義第二維的長度
例:
int a [] [3] = {1, 2, 3, 4, 5, 6};
系統會根據輸入的總個數分配存儲空間,易知這個二維數組有二行;
再如:

有關二維數組的知識就講到這裡啦,歡迎小夥伴來交流哦!
預告:二維數組的應用
2020-04-21 17:26:54

