C 語言中的多維數(shù)組
C 語言中的多維數(shù)組與我們?cè)跀?shù)學(xué)中學(xué)習(xí)到的多維數(shù)組是一致的。如果你還不知道什么是多維數(shù)組也沒有關(guān)系。多維數(shù)組可以看成是之前學(xué)習(xí)過的數(shù)組的擴(kuò)展。它能讓你完成一些僅僅依靠一維數(shù)組沒有辦法完成的事情。讓很多事情完成的更為簡(jiǎn)單。
1. 多維數(shù)組的聲明
多維數(shù)組可以看作是一維數(shù)組的擴(kuò)展。所以,它的聲明就是在之前學(xué)習(xí)的數(shù)組,也叫一維數(shù)組,之后繼續(xù)添加大括號(hào),如果添加一組大括號(hào),那么稱之為二維數(shù)組,以此類推,就構(gòu)成了 N 維數(shù)組。
int intArray[A1][A2][A3][...][An]
int intArray[2][2]; // 二維數(shù)組
float floArtay[3][4][5]; // 三維數(shù)組
與一維數(shù)組中的聲明類似,在多維數(shù)組中,第如果直接進(jìn)行定義初始化,那么一個(gè)維數(shù)可以不指定,但是后面的維數(shù)是要明確指定的。
例如:
int intArray[][5][3]
2. 多維數(shù)組初始化
多維數(shù)組和一維數(shù)組一樣,可以將全部的值一次完全賦給數(shù)組,也可以只初始化部分內(nèi)容。你可以如同之前的一維數(shù)組一樣,在大括號(hào)中以此寫入初始化的數(shù)值。但是出于可讀性的考慮,你最好按照數(shù)組的維數(shù),用大括號(hào)對(duì)應(yīng)。就如同下面的例子中一樣。
short a[2][2] = { 1, 2, 3, 4};
short b[2][2] = { {1, 2}, {3, 4}};
short c[2][2] = { 3, 4};
short d[2][2] = { {}, {3, 4}};
上面這些變量初始化中,數(shù)組 a 的初始化方式和之前我們介紹過的一樣。但是這樣在多維數(shù)組中是我們不推薦的。因?yàn)樵趯?duì)應(yīng)關(guān)系顯示不明顯。
數(shù)組 b 的初始化方式是我們推薦的,這種初始化看上去對(duì)應(yīng)關(guān)系比較明了。當(dāng)然缺點(diǎn)是我們要輸入很多個(gè)括號(hào)。
數(shù)組 C 是進(jìn)行了部分初始化,將 c[0][0] 和 c[0][1] 兩個(gè)位置賦值為 3 和 4,其它位置會(huì)自動(dòng)賦值為 0 。
多維數(shù)組與一維數(shù)組一樣,一定要先初始化或者賦值后才能使用。否則也會(huì)產(chǎn)生未知的錯(cuò)誤。
數(shù)組 d 展示了采用對(duì)應(yīng)維數(shù)的大括號(hào)的便捷之處。我們這里只給 d[1][0] 和 d[1][1] 賦值,而沒有給前面的兩個(gè)位置賦值。
3. 多維數(shù)組的使用
多維數(shù)組的賦值與取值與之前的一維數(shù)組是一樣的。通過索引位置直接獲取相應(yīng)的數(shù)值或者進(jìn)行賦值操作。例如 a[2][3] = 12
。
由于有多維的存在。我們想要獲取其中的每一個(gè)數(shù)值的時(shí)候,就要使用循環(huán)的嵌套。一般情況下,有幾個(gè)維度,就要使用幾重的嵌套。
4. 示例
#include <stdio.h>
int main()
{
short a[2][2] = {{}, {3, 4}};
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
printf("a[%d][%d] = %d\n", i, j, a[i][j]);
}
}
int b[][2] = {{1, 2}, {3, 4}};
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
printf("b[%d][%d] = %d\n", i, j, b[i][j]);
}
}
int c[3][2][2] = {{{1, 2}, {3, 4}},
{{5, 6}, {7, 8}},
{{9, 10}, {11, 12}}};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 2; k++)
{
printf("c[%d][%d][%d] = %d\n", i, j, k, c[i][j][k]);
}
}
}
return 0;
}
運(yùn)行結(jié)果:
a[0][0] = 0
a[0][1] = 0
a[1][0] = 3
a[1][1] = 4
b[0][0] = 1
b[0][1] = 2
b[1][0] = 3
b[1][1] = 4
c[0][0][0] = 1
c[0][0][1] = 2
c[0][1][0] = 3
c[0][1][1] = 4
c[1][0][0] = 5
c[1][0][1] = 6
c[1][1][0] = 7
c[1][1][1] = 8
c[2][0][0] = 9
c[2][0][1] = 10
c[2][1][0] = 11
c[2][1][1] = 12
示例程序里面通過 3 種不同的方式初始化了 a、b、c 三個(gè)多維數(shù)組,其中 a 與 b 數(shù)組是 2 維數(shù)數(shù)組,c 是 3 維數(shù)組。
這里在初始化數(shù)組的時(shí)候,我們采用通常建議的多層大括號(hào)的組織方式,這種方式雖然使用了更多的括號(hào),但是可讀性會(huì)更強(qiáng),更有條理性。
在多維數(shù)組的使用中,會(huì)采用多層的嵌套循環(huán)來進(jìn)行內(nèi)部全部變量的賦值或者取值操作,如果只是想對(duì)于數(shù)組中的某一個(gè)位置上的數(shù)值進(jìn)行修改,只要直接使用其索引位置就可以了,如 a[0][1] = 100
等。
5. 小結(jié)
多維數(shù)組可以被看做是之前介紹的一維數(shù)組的擴(kuò)展。其基本的聲明就是在一維數(shù)組的基礎(chǔ)上,根據(jù)需要在后面添加成對(duì)的方括號(hào)即可。其初始化過程與一維數(shù)組類似,只不過為了增加代碼的可讀性,便于查錯(cuò)和維護(hù)的需要,建議在初始化過程中使用大括號(hào)來分組賦值。多維數(shù)組的使用也有一維數(shù)組無異。只不過需要用到多重嵌套的循環(huán)來進(jìn)行遍歷每一個(gè)數(shù)值。