介紹
A two-dimensional array in C++ is the simplest form of a multi-dimensional array. It can be visualized as an array of arrays. The image below depicts a two-dimensional array.

A two-dimensional array is also called a matrix. It can be of any type like integer, character, float, etc. depending on the initialization. In the next section, we are going to discuss how we can initialize 2D arrays.
在C++中初始化2D數組
那麼,在C++中我們如何初始化二維數組呢?就這麼簡單:
int arr[4][2] = {
{1234, 56},
{1212, 33},
{1434, 80},
{1312, 78}
} ;
所以,正如您所見,我們初始化了一個2D數組arr
,有4行和2列,它是一個數組的數組。數組的每個元素再次是一個整數數組。
我們還可以以以下方式初始化2D數組。
int arr[4][2] = {1234, 56, 1212, 33, 1434, 80, 1312, 78};
在這種情況下,arr
仍然是一個具有4行和2列的2D數組。
在C++中打印2D數組
我們完成了2D數組的初始化,現在如果沒有實際打印出來,我們無法確認是否正確執行了初始化。
此外,在許多情況下,我們可能需要在對其執行一些操作後打印結果的2D數組。那我們該怎麼辦呢?
下面的代碼顯示了我們如何實現這一點。
#include<iostream>
using namespace std;
main( )
{
int arr[4][2] = {
{ 10, 11 },
{ 20, 21 },
{ 30, 31 },
{ 40, 41 }
} ;
int i,j;
cout<<"Printing a 2D Array:\n";
for(i=0;i<4;i++)
{
for(j=0;j<2;j++)
{
cout<<"\t"<<arr[i][j];
}
cout<<endl;
}
}
輸出:

在上面的代碼中,
- 首先,我們以特定值初始化一個2D數組`arr[4][2]`。
- 之後,我們嘗試使用兩個for循環來打印相應的數組。
- 外部for循環遍歷行,而內部for循環遍歷2D數組的列。
- 因此,對於外部循環的每次迭代,`i`增加並將我們帶到下一個1D數組。同樣,內部循環一次遍歷整個1D數組。
- 相應地,我們打印單個元素`arr[i][j]`。
將2D數組元素作為用戶輸入
之前,我們看到了如何使用預定義值初始化2D數組。但我們也可以將其設置為用戶輸入。讓我們看看如何操作
#include<iostream>
using namespace std;
main( )
{
int s[2][2];
int i, j;
cout<<"\n2D Array Input:\n";
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
cout<<"\ns["<<i<<"]["<<j<<"]= ";
cin>>s[i][j];
}
}
cout<<"\nThe 2-D Array is:\n";
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
cout<<"\t"<<s[i][j];
}
cout<<endl;
}
}
輸出:

對於上述代碼,我們聲明了一個2X2的2D數組`S`。使用兩個嵌套的for循環,我們遍歷數組的每個元素並獲取相應的用戶輸入。這樣,整個數組就被填滿了,我們打印出來看看結果。
在C++中使用二維數組進行矩陣加法
作為一個例子,讓我們看看如何使用二維數組執行矩陣加法並打印結果。
#include<iostream>
using namespace std;
main()
{
int m1[5][5], m2[5][5], m3[5][5];
int i, j, r, c;
cout<<"Enter the no.of rows of the matrices to be added(max 5):";
cin>>r;
cout<<"Enter the no.of columns of the matrices to be added(max 5):";
cin>>c;
cout<<"\n1st Matrix Input:\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
cout<<"\nmatrix1["<<i<<"]["<<j<<"]= ";
cin>>m1[i][j];
}
}
cout<<"\n2nd Matrix Input:\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
cout<<"\nmatrix2["<<i<<"]["<<j<<"]= ";
cin>>m2[i][j];
}
}
cout<<"\nAdding Matrices...\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
m3[i][j]=m1[i][j]+m2[i][j];
}
}
cout<<"\nThe resultant Matrix is:\n";
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
cout<<"\t"<<m3[i][j];
}
cout<<endl;
}
}
輸出:

在這裡,
- 我們取兩個最多有5行5列的矩陣
m1
和m2
。另外還有一個矩陣m3
,我們將在其中存儲結果, - 作為用戶輸入,我們使用了相同的行數和列數來表示兩個矩陣。因為我們要進行矩陣加法,所以兩個矩陣的行數和列數應該相同,
- 之後,我們再次使用嵌套的for循環來接受用戶輸入的兩個矩陣,
- 在這一點上,我們擁有了兩個矩陣m1和m2,
- 然後我們通過兩個for循環遍歷m3矩陣,並通過將
m1[i][j]+m2[i][j]
的值更新到相應的元素m3[ i ][ j ]
中。通過外部for循環的結束,我們得到我們想要的矩陣, - 最後,我們打印出結果矩陣m3。
C++中的二維數組指針
如果我們可以有一個指向整數的指針,一個指向浮點數的指針,一個指向字符的指針,那麼我們不能擁有一個指向數組的指針嗎?當然可以。下面的程序顯示了如何構建和使用它。
#include<iostream>
using namespace std;
/* 用法:指向數組的指針 */
main( )
{
int s[5][2] = {
{1, 2},
{1, 2},
{1, 2},
{1, 2}
} ;
int (*p)[2] ;
int i, j;
for (i = 0 ; i <= 3 ; i++)
{
p=&s[i];
cout<<"Row"<<i<<":";
for (j = 0; j <= 1; j++)
cout<<"\t"<<*(*p+j);
cout<<endl;
}
}
輸出:

這裡,
- 在上面的代碼中,我們嘗試使用指針打印一個2D數組,
- 正如我們之前所做的那樣,首先我們初始化了2D數組,
s[5][2]
。還有一個指針(*p)[2]
,其中p是一個指針,它存儲著一個具有2個元素的數組的地址, - 正如我們已經說過的,我們可以將2D數組拆分為數組的數組。所以在這種情況下,s實際上是一個具有5個元素的數組,這些元素進一步實際上是每行具有2個元素的數組。
- 我們使用一個
for
循環遍歷這5個數組元素,s。對於每次迭代,我們將p賦值為s[i]
的地址, - 此外,內部for循環使用指針p打印出數組s[i]的個別元素。這裡,
(*p + j)
給出了元素s[i][j]的地址,因此使用*(*p+j)
我們可以訪問相應的值。
將2D數組傳遞給函數
在這一部分,我們將學習如何將2D數組傳遞給任何函數並訪問相應的元素。在下面的代碼中,我們將數組a傳遞給兩個函數show()
和print()
,它們會打印出傳遞的2D數組。
#include<iostream>
using namespace std;
void show(int (*q)[4], int row, int col)
{
int i, j ;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<"\t"<<*(*(q + i)+j);
cout<<"\n";
}
cout<<"\n";
}
void print(int q[][4], int row, int col)
{
int i, j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<"\t"<<q[i][j];
cout<<"\n";
}
cout<<"\n";
}
int main()
{
int a[3][4] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21} ;
show (a, 3, 4);
print (a, 3, 4);
return 0;
}
輸出:

這裡,
- 在
show( )
函數中,我們通過聲明int (*q)[4]
將q定義為指向一個由4個整數組成的數組的指針, - q holds the base address of the zeroth 1-D array
- 然後將這個地址賦給q,一個int指針,然後使用這個指針訪問所有零組數組的元素。
- 在下一次循環中,當
i
取值1時,表達式q+i會取得第一個1-D數組的地址。這是因為q是指向零組1-D數組的指針,將1添加到它會給我們下一個1-D數組的地址。這個地址再次賦給q,並使用它訪問下一個1-D數組的所有元素。 - 在第二個函數
print()
中,q的聲明如下:int q[][4]
, - 這與int (*q )[4]相同,其中q是指向包含4個整數的數組的指針。唯一的優勢是我們現在可以使用更熟悉的表達式
q[i][j]
來訪問數組元素。我們在show()
中也可以使用相同的表達式,但為了更好地理解指針的使用,我們使用指針來訪問每個元素。
結論
所以,在這篇文章中,我們討論了 C++ 中的二維數組,以及如何執行各種操作,以及它在矩陣加法中的應用。 如有任何進一步的問題,請隨時在評論中提出。
參考資料
Source:
https://www.digitalocean.com/community/tutorials/two-dimensional-array-in-c-plus-plus