数组类型

C语言中有两种数组类型:

  1. 一维数组
  2. 多维数组

一维数组

一维数组也称为线性数组,它只有一行但有多列。

语法:

dataType array_variable_name[MAXIMUM_COLUMN_COUNT];

例如:
int arr_num[5]={10,20,30,40,50};
或者
int arr_num[]={10,20,30,40,50};
array_index_1
上面的数组是一维数组,因为它只有一行但有5列。这在之前的章节中,我们有介绍过。

多维数组

尽管C编译器支持2维,3维,4维...n维数组,在本文中,我们只介绍最常用的两个多维数组:

  1. 二维数组;
  2. 三维数组;

二维数组

二维数组是一维数组的数组。二维数组沿两个方向(x和y)扩展,即它具有多个行和列。

语法:

dataType array_variable_name [ROW_COUNT] [COLUMN_COUNT];
或者
dataType array_variable_name [] [COLUMN_COUNT];

在第二种语法中,如果我们知道在一个行的列数,根据数组元素个数我们就可以计算行数,但知道行数却无法计算列数。

例如,如果COLUMN_COUNT = 5且元素总数Count = 20,则

ROW_COUNT = COLUMN_COUNT / 5 = 4

语法实例:

int arr_num[2][5]={10,20,30,40,50,60,70,80,90,100};
或
int arr_num[][5]={10,20,30,40,50,60,70,80,90,100}; 
或
int arr_num[2][5]={{10,20,30},{40,50,60}} 

二维数组表示
2-d-array-2
例如,我们可以像这样访问第一行 和第0列的元素

二位数组

二位数组的存储

二位数组

二维矩阵程序
编写一个程序来显示n x m矩阵,其中n是矩阵的行,m是矩阵的列。用户将在运行时输入所需的行数和列数。假设用户输入n = 2且m = 3,则矩阵如下:

二位数组

二维数组例程
程序如下:

#include <stdio.h>

int main()
{
    long int matrix[20][20]={0}; /*声明一个最大支持20 x 20 的二维数组*/
    unsigned int row_Index,col_Index;
    unsigned int row_count,col_count;

    printf("程序显示 n * m");
    printf("\n输入数组行数: ");
    scanf("%u",&row_count);
    printf("\n输入数组列数: ");
    scanf("%u",&col_count);


    for(row_Index=0;row_Index<row_count;row_Index++)
    {
        for(col_Index=0;col_Index<col_count;col_Index++)
        {
            printf("\n输入元素matrix[%u][%u]的值: ",row_Index,col_Index);
            scanf("%ld",&matrix[row_Index][col_Index]);
        }
    }

    printf("\n以下是你输入的数组:\n");

    for(row_Index=0;row_Index<row_count;row_Index++)
    {
        for(col_Index=0;col_Index<col_count;col_Index++)
        {
            printf("%ld\t",matrix[row_Index][col_Index]);
        }
        printf("\n");
    }

    return 0;
}

执行结果:
matrix

三维数组

三维数组是二维数组的数组。三维数组在所有三个方向(x,y,z)上都是二维块。

语法:

dataType array_variable_name [2D_Block_Count] [ROW_COUNT] [COLUMN_COUNT];

2D_Block_Count: 2D数组总数
ROW_COUNT:二维数组每个块中的行数
COLUMN_COUNT:二维数组每个块中的列数

语法示例:

int arr_num[2][2][3]={10,20,30,40,50,60,70,80,90,100,110,120};
或 
int arr_num[2][2][3]=
{
  {10,20,30},
  {40,50,60},

  {70,80,90},
  {100,110,120}
}

三维数组内存映射的图示

二位数组

我们可以像这样访问三维数组的任何索引处的元素

二位数组

三维数组程序
编写一个程序以显示bxnxm 3维数组,其中b是每个二维块的计数,n是行,而m是每个二维块的列。用户将在运行时输入所需数量的块,行和列。

#include <stdio.h>

int main()
{
    long int matrix[20][20][20]={0};
    unsigned int block_Index,row_Index,col_Index;
    unsigned int block_count,row_count,col_count;

    printf("程序显示一个三维数组 b* n * m");

    printf("\n数组二维块的数量: ");
    scanf("%u",&block_count);
    printf("\n输入行数: ");
    scanf("%u",&row_count);
    printf("\n输入列数: ");
    scanf("%u",&col_count);

    for(block_Index=0;block_Index<block_count;block_Index++)
    {
      for(row_Index=0;row_Index<row_count;row_Index++)
      {
        for(col_Index=0;col_Index<col_count;col_Index++)
        {
          printf("\n输入元素matrix[%u][%u][%u]的值:         ",block_Index,row_Index,col_Index);
          scanf("%ld",&matrix[block_Index][row_Index][col_Index]);
        }
      }
    }

    printf("\n以下是你输入的三维数组Matrix\n");
    for(block_Index=0;block_Index<block_count;block_Index++)
    {
      for(row_Index=0;row_Index<row_count;row_Index++)
      {
        for(col_Index=0;col_Index<col_count;col_Index++)
        {
            printf("%ld\t",matrix[block_Index][row_Index][col_Index]);
        }
        printf("\n");
      }
       printf("\n");
    }
    return 0;
}

请自行运行程序,根据提示输入一个三维数组,查看程序运行结果。

在这里我尝试涵盖一维和多维数组的所有基础知识,并且在接下来的章节中我将讨论数组中指针和函数的使用。请务必自己运行示例代码,加深对数组的理解。

下一节