C语言多维数组

  • Post category:C

C语言支持多维数组的定义和操作,通过理解C语言多维数组的使用技巧,我们能够更好的完成相关任务。本文将对C语言多维数组进行详细讲解。

1. 多维数组的定义

在C语言中,多维数组的定义方法是在数组名后添加方括号,方括号内包含有多个数值,每个数值代表了该数组的一个维度大小。例如,定义一个包含3行和4列的二维数组,可以使用如下语句:

int a[3][4];

在定义多维数组时,对于每个维度都可以指定一个初始化值,例如:

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};

这样就定义了一个2行3列的二维数组,并给出了对应的初始化值。

2. 多维数组的访问

多维数组的访问可以使用多个方括号,每个方括号对应一个数组的维度。例如,对于上述二维数组,要访问第2行第3列的元素,可以使用如下语句:

int x = a[1][2]; // x的值为6

3. 多维数组的初始化

多维数组的初始化可以通过嵌套的方式实现,对于每个维度都可以指定一个初始化值。例如,对于一个3行4列的二维数组,可以使用如下方式初始化:

int a[3][4] = {
  {1, 2, 3, 4},
  {5, 6, 7, 8},
  {9, 10, 11, 12}
};

另外,也可以只对一部分元素进行初始化,例如:

int a[3][4] = {
  {1, 2},
  {4, 5, 6},
  {9}
};

这样对于未指定初始化值的元素,会被自动赋值为0。

4. 二维数组的遍历

对于一个二维数组,可以使用嵌套的循环对其进行遍历。例如,遍历一个3行4列的数组a,可以使用如下代码:

for(int i=0; i<3; i++){
  for(int j=0; j<4; j++){
    printf("%d ", a[i][j]);
  }
  printf("\n");
}

这样就可以依次打印出数组a的所有元素。

5. 三维数组的使用

对于三维数组,同样可以使用类似的方式进行定义、访问和遍历。例如,定义一个3x4x5的三维数组可以使用如下代码:

int a[3][4][5];

访问一个三维数组的元素也需要使用三个方括号,例如:

int x = a[1][2][3];

遍历一个三维数组则需要三层嵌套循环。

6. 示例1:矩阵相加

下面是一个使用二维数组的示例,展示了如何实现简单的矩阵相加:

#include <stdio.h>

#define ROWS 3
#define COLS 3

void addMatrix(int a[][COLS], int b[][COLS], int c[][COLS])
{
  for(int i=0; i<ROWS; i++){
    for(int j=0; j<COLS; j++){
      c[i][j] = a[i][j] + b[i][j];
    }
  }
}

void printMatrix(int a[][COLS])
{
  for(int i=0; i<ROWS; i++){
    for(int j=0; j<COLS; j++){
      printf("%d ", a[i][j]);
    }
    printf("\n");
  }
}

int main()
{
  int a[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  int b[ROWS][COLS] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
  int c[ROWS][COLS];

  addMatrix(a, b, c);
  printf("Matrix A:\n");
  printMatrix(a);
  printf("\nMatrix B:\n");
  printMatrix(b);
  printf("\nMatrix C:\n");
  printMatrix(c);

  return 0;
}

在这个示例中,我们定义了一个3×3的二维数组a和一个3×3的二维数组b,并调用addMatrix函数对它们进行相加。相加后的结果存储在一个3×3的二维数组c中,我们使用printMatrix函数打印出了三个矩阵。

7. 示例2:矩阵乘法

下面是一个使用二维数组的示例,展示了如何实现简单的矩阵乘法:

#include <stdio.h>

#define ROWS1 3
#define COLS1 2
#define ROWS2 2
#define COLS2 3

void mulMatrix(int a[][COLS1], int b[][COLS2], int c[][COLS2])
{
  for(int i=0; i<ROWS1; i++){
    for(int j=0; j<COLS2; j++){
      c[i][j] = 0;
      for(int k=0; k<COLS1; k++){
        c[i][j] += a[i][k] * b[k][j];
      }
    }
  }
}

void printMatrix(int a[][COLS2], int rows, int cols)
{
  for(int i=0; i<rows; i++){
    for(int j=0; j<cols; j++){
      printf("%d ", a[i][j]);
    }
    printf("\n");
  }
  printf("\n");
}

int main()
{
  int a[ROWS1][COLS1] = {{1, 2}, {3, 4}, {5, 6}};
  int b[ROWS2][COLS2] = {{7, 8, 9}, {10, 11, 12}};
  int c[ROWS1][COLS2];

  mulMatrix(a, b, c);
  printf("Matrix A:\n");
  printMatrix(a, ROWS1, COLS1);
  printf("Matrix B:\n");
  printMatrix(b, ROWS2, COLS2);
  printf("Matrix C:\n");
  printMatrix(c, ROWS1, COLS2);

  return 0;
}

在这个示例中,我们定义了一个3×2的二维数组a和一个2×3的二维数组b,并调用mulMatrix函数对它们进行乘法运算。乘法后的结果存储在3×3的二维数组c中,我们使用printMatrix函数打印出了三个矩阵。