C ++中的2D数组
#初学者 #编程 #c #cpp

介绍

一个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阵列 -

  1. 行大遍历
  2. 专栏大遍历

行大遍历

https://static-assets.codecademy.com/Paths/ap-computer-science/TwoDArrays/row_major.png

这是穿越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]时,我们都会按行元素进行行。

列主要遍历

https://static-assets.codecademy.com/Paths/ap-computer-science/TwoDArrays/column_major.png

这是一种棘手的方式,在大多数地方,它没有被教导。我们可以用像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上把我撞倒。