介绍
一个2D阵列不过是一个巨大的1D数组。在普通的1D数组中,我们可以看到该数组包含诸如int,char,double,string等的数据。以相同的方式,2D数组包含1D数组而不是数据。因此我们可以称其为数组。
声明和初始化
int row = 3;
int column = 4
int arr[row][column] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
对于声明一个2D数组,我们编写数组名称,然后是其行号和列号。因此,在示例中,数组arr
包含3行和4列。为了初始化,我们将行写入1D数组,并用等于列号的元素填充数组。
我们也可以像这样初始化一个2D数组 -
int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
这个阵列也有3行和4列,但看起来的井井有条。因此,第一种方法是首选。
遍历2D阵列
用于遍历2D阵列,我们使用嵌套的循环。我们可以通过两种方式穿越2D阵列 -
- 行大遍历
- 专栏大遍历
行大遍历
这是穿越2D阵列的常见方法。我们可以像这样的嵌套循环做到这一点 -
int row = 3, col = 4;
int arr[row][col] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
cout << arr[i][j] << " ";
//output: 1 2 3 4 5 6 7 8 9 10 11 12
}
}
在行横穿外循环的行中,在行上迭代,而内部循环则在列上迭代。结果,当我们在每次迭代中访问arr[i][j]
时,我们都会按行元素进行行。
列主要遍历
这是一种棘手的方式,在大多数地方,它没有被教导。我们可以用像this-
这样的嵌套循环进行列柱横穿列
int row = 3, col = 4;
int arr[row][col] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
for(int i = 0; i < col; i++)
{
for(int j = 0; j < row; j++)
{
cout << arr[j][i] << " ";
//output: 1 5 9 2 6 10 3 7 11 4 8 12
}
}
在列横穿外循环的列中,在圆柱上迭代,而内部环则在行上迭代。要注意的是 - 我们在这里访问arr[j][i]
而不是arr[i][j]
,这意味着我们正在访问每一列的元素。
指向2D数组
如果我们可以将一个指针指向整数,一个指向浮点的指针,一个指向字符的指针,那么我们也可以使用2D数组的指针。以下程序显示了如何构建和使用它。
int row = 3, col = 4;
int arr[row][col] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
int *p;
for (int i = 0 ; i < 3 ; i++)
{
p = &arr[i][0];
cout << "Row " << i << ":";
for (int j = 0; j < 4; j++)
cout << "\t" << *(p+j);
cout << endl;
}
在上面的代码中,我们尝试使用指针打印一个2D数组。首先,我们初始化了一个2D数组,arr[row][col]
和一个指针(*p)[4]
,其中 p 是一个指针,它存储了数组的第一个元素的地址。我们使用一个用于循环的循环遍历2D阵列arr
的这3个元素。对于每次迭代,我们都将 p 分配给arr[i][0]
的地址,这是每行的第一个元素的地址。此外,循环的内部使用指针 p 打印出数组arr[i]
的各个元素。在这里,*(p + j)
为我们提供了单个元素arr[i][j]
的地址,因此使用*(p+j)
我们可以访问相应的值。
在功能中传递2D数组
我们可以像任何其他数据一样将2D数组作为函数参数传递到一个函数参数中。在下面的代码中,我们将阵列arr传递到函数âprintArray()
,该函数打印出传递的2D数组。
#include<iostream>
using namespace std;
void printArray(int a[][4], int row, int col)
{
for(int i = 0 ; i < row; i++)
{
for(int j = 0; j < col; j++)
cout << "\t" << a[i][j];
cout << "\n";
}
cout << "\n";
}
int main()
{
int arr[3][4] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21} ;
printArray(arr, 3, 4);
return 0;
}
在函数printArray()
中, a 的声明看起来像这样:int a[][4]
。这里 a 是指向4个整数数组的指针。在功能中,我们可以像其他地方一样使用数组。
结论
在本文中,我们讨论了2D数组C ++,如何穿越它,如何使用它的指针以及最后如何将其传递给函数。如果您有任何混乱或疑问,您可以在samiunblack@gmail.com上把我撞倒。