C 语言中的二维数组

C 语言中的二维数组本质上就是数组的数组。如果数据是线性的,我们可以使用一维数组。然而,要处理多层级的数据,我们就必须使用多维数组。

C 语言中的二维数组是多维数组最简单的形式。在二维数组中,数据以行和列的方式存储。我们可以使用行索引和列索引来访问记录(就像 Excel 文件一样)。

C 语言中二维数组的声明

在 C 语言编程中,二维数组的基本语法或声明如下所示

Data_Type Arr_Name[Row_Size][Column_Size]
  • 数据类型 (Data_type):这将决定数组可以接受的元素类型。例如,如果我们想存储整数值,那么我们将数据类型声明为 int;如果我们想存储浮点数值,那么我们将数据类型声明为 float,等等。
  • 数组名称 (Arr_Name):这是你希望给这个 C 语言二维数组起的名字。例如,students、age、marks、employees 等。
  • 行大小 (Row_Size):它可以存储的行元素数量。例如,如果 Row_Size = 10,那么它将有 10 行。
  • 列大小 (Column_Size):它可以存储的列元素数量。例如,如果 Column_Size = 8,那么它将有 8 列。

二维数组声明示例

int Employees[4][3];

  1. 在这里,我们使用 int作为数据类型进行声明。所以,上面这个 C 语言二维数组将只接受整数。如果你尝试添加浮点数值,它会抛出一个错误。
  2. Employees – 它的名称。
  3. 它的行大小是 4。这意味着 Employees 数组只能接受四个整数值作为行。
    • 如果我们尝试存储超过 4 个值,那么它会抛出一个错误。
    • 我们可以存储少于 4 个值。例如,如果我们存储两个整数值,那么剩下的 2 个值将被赋为默认值(即 0)。
  4. 它的列大小是 3。这意味着二维数组 Employees 只能接受 3 个整数值作为列。
    • 如果我们尝试存储超过 3 个值,它会抛出一个错误。
    • 我们可以存储少于 3 个值。例如,如果我们存储 1 个整数值,剩下的 2 个值将被赋为默认值(即 0)。

C 语言中的二维数组初始化

我们可以通过多种方式初始化二维数组。在此之前,请参考 C 语言编程中的一维数组多维数组的文章。

C 语言二维数组初始化的第一种方法

int Employees[4][3] = { 10, 20, 30, 15, 25, 35, 22, 44, 66, 33, 55, 77 };

前三个元素将是第一行,接下来的三个元素是第二行,再接下来的 3 个元素是第三行,最后 3 个元素是第四行。这里我们以 3 个为一组进行划分,因为我们的列大小 = 3。

上面的二维数组语句也可以写成

int Employees[4][3] = { {10, 20, 30}, {15, 25, 35}, {22, 44, 66}, {33, 55, 77} };

在这里,我们用花括号 ({}) 包围了每一行。使用花括号来分隔行总是一个好习惯。

第二种方法

int Employees[ ][ ] = { {10, 20, 30}, {15, 25, 35}, {22, 44, 66}, {33, 55, 77} };

在这里,我们没有指定行大小和列大小。然而,编译器足够智能,可以通过检查行和列中的元素数量来计算大小。

我们也可以将这个二维数组写成

int Employees[ ][3] = { {10, 20, 30}, {15, 25, 35}, {22, 44, 66}, {33, 55, 77} };

在 C 语言中初始化二维数组的第三种方法

int Employees[2][3] = { {4},
                        {6, 7} 
                      };

在这里,我们声明的 Employees 数组行大小为 2,列大小为 3,但我们只在第一行分配了 1 个列,在第二行分配了 2 个列。在这种情况下,剩余的值将被赋为默认值(在这种情况下是 0)。

上面的数组将会是

Employees[2][3] = { {4, 0, 0},
                    {6, 7, 0} 
                  };  
//It means

Employees[0][0] = 4

Employees[0][1] = 0

Employees[0][2] = 0

Employees[1][0] = 6

Employees[1][1] = 7

Employees[1][2] = 0

第四种方法

上述三种初始化二维数组的方法适用于存储少量元素。如果我们想存储 100 行或 50 列的值怎么办?使用上述任何一种方法添加所有这些值都将是一场噩梦。为了解决这个问题,我们可以在这里使用 C 语言编程中的 For 循环概念。

int rows, columns, Employees[100][50];

for (rows =0; rows < 100 ; rows++)
 {
   for (columns =0; columns < 50; columns++)
    {
      Employees[rows][columns] = rows + columns;
 }

比如说,Employees[3][4] = 3+4 = 7

访问 C 语言二维数组元素

我们可以使用索引来访问二维数组的元素。通过索引,我们可以单独访问或修改/更改数组中存在的每个元素。索引值从 0 开始,到 n-1 结束,其中 n 是行或列的大小。

例如,一个 Student[8][5] 的数组将存储 8 行元素和 5 列元素。要访问或修改第一个值,请使用 Student[0][0];要访问或修改第 2 行第 3 列的值,请使用 Student[1][2];要访问第 8 行第 5 列的值,请使用 Student[7][4]。让我们看一个二维数组的例子以便更好地理解。

int Employees[4][3] = { {10, 20, 30},
                        {15, 25, 35},
                        {22, 44, 66},
                        {33, 55, 77}
                      };

//To Access the values in the Employees[4][3]

Printf("%d", Employees[0][0]) = 10

Printf("%d", Employees[0][1]) = 20

Printf("%d", Employees[0][2]) = 30

Printf("%d", Employees[1][0]) = 15

Printf("%d", Employees[1][1]) = 25

Printf("%d", Employees[1][2]) = 35

Printf("%d", Employees[2][0]) = 22

Printf("%d", Employees[2][1]) = 44

Printf("%d", Employees[2][2]) = 66

Printf("%d", Employees[3][0]) = 33

Printf("%d", Employees[3][1]) = 55

Printf("%d", Employees[3][2]) = 77


//To Alter the values in the Employees[4][3]

Employees[2][1] = 98; - It will change the value of Employees[2][1] from 44 to 98

对于大量的行和列,我们可以使用 For 循环来访问它们。让我们使用上面的 Employees[4][3] 数组。

int rows, columns;

for (rows = 0; rows < 4; rows++)
 {
  for (columns =0; columns < 3; columns++)
   {
     Printf("%d", Employees[rows][columns]);
   }
 }

C 语言二维数组示例

在这个程序中,我们将声明 2 个二维数组并用一些值对它们进行初始化。接下来,我们将再声明一个二维数组,用来存储那 2 个数组的和。

#include<stdio.h>

int main()
{
  int a[2][3] = { {15, 25, 35}, {45, 55, 65} };
  int b[2][3] = { {12, 22, 32}, {55, 25, 85} };
  int rows, columns, Sum[2][3];
  
  for(rows = 0; rows < 2; rows++)
   {
    for(columns = 0; columns < 3;columns++)
     {
      Sum[rows][columns] = a[rows][columns] + b[rows][columns];  
     }
   }
  
  printf("\n Sum Of those Two Arrays are:\n");
  for(rows = 0; rows < 2; rows++)
   {
    for(columns = 0; columns < 3; columns++)
     {
      printf("%d, ", Sum[rows][columns]);
     }
   }
  
  return 0;
}
Two Dimensional Array in C 2D

让我们逐次迭代地看一下二维数组的执行过程。

行第一次迭代:行的值将为 0,条件 (rows < 2) 为真。所以,它将进入第二个 for 循环。

二维数组的列第一次迭代。
列的值将为 0,条件 (columns < 2) 为真。所以,它将开始执行循环内的语句,直到条件失败。
Sum[rows][columns] = a[rows][columns] + b[rows][columns];
Sum[0][0] = a[0][0] + b[0][0] = 15 + 12
= 27;

第二次迭代
列的值将为 1,条件 (columns < 3) 为真。由于我们没有退出内层循环(列循环),行的值仍将是 0。
Sum[0][1]= a[0][1] + b[0][1] = 25 + 22;
Sum[0][1]= 47;

列第 3 次迭代
columns= 2,并且条件 (2 < 3) 为真。
Sum[0][2] = a[0][2] + b[0][2] = 35 + 32
Sum[0][2] = 67;

增加后,columns 的值为 3,条件 (columns < 3) 将失败。所以,它将退出循环。

现在,行的值将增加,并开始 C 语言中二维数组的第二次迭代。

行第二次迭代
行的值为 1,条件 (rows < 2) 为真。所以,它将进入第二个 for 循环。

列第一次迭代
列的值为 0,条件 (columns < 3) 为真。
Sum[1][0] = a[1][0] + b[1][0] = 45 + 55;
Sum[1][0] = 100;

第二次迭代
column= 1,并且条件 (columns < 3) 为真。
Sum[0][1]= a[1][1] + b[1][1] = 55 + 25;
Sum[0][1]= 80;

列第 3 次迭代
columns= 2,并且条件 (columns < 3) 为真。
Sum[1][2] = a[1][2] + b[1][2] = 65 + 85;
Sum[1][2] = 150;

增加后,columns 的值为 3,条件 (columns < 3) 将失败。所以它将退出循环。

现在,行的值将增加,这意味着 rows = 2。条件 (rows < 2) 将失败,所以它将退出循环。

二维数组程序中的下一个 for 循环将像我们上面解释的那样遍历。然而,它不是求和,而是使用其中的 printf 语句,用逗号分隔,逐个显示值。

Sum 的最终输出是
Sum[2][3] = { {27, 47, 67}, {100, 80, 150} };

评论已关闭。