二维数组

具有两个下标的数组

二维数组

二维数组是具有两个下标的数组,对应于数学上的矩阵概念,可表示为二维矩形格。二维数组也用统一的数组名来标识,第一个下标表示行,第二个下标表示列。下标与一维数组一样都是从0开始。二维数组在内存中的存储形式有两种:以行序为主序和以列序为主序。以行序为主序的存储方式是按行存储,即按照第一行、第二行……第(R-1)行的顺序依次存储;以列序为主序的存储方式是按列存储,即按照第一列、第二列……第(C-1)列的顺序依次存储。存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。[0][1][2]二维数组,每个元素的长度为t个字节,设为A的第一个元素,即二维数组的行下标从p到m,列下标从q到n,按“行优先顺序”存储时则元素的地址计算为:

二维数组是具有两个下标的数组,对应于数学上的矩阵概念,可表示为二维矩形格。二维数组也用统一的数组名来标识,第一个下标表示行,第二个下标表示列。下标与一维数组一样都是从0开始。二维数组在内存中的存储形式有两种:以行序为主序和以列序为主序。以行序为主序的存储方式是按行存储,即按照第一行、第二行……第(R-1)行的顺序依次存储;以列序为主序的存储方式是按列存储,即按照第一列、第二列……第(C-1)列的顺序依次存储。存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节[1][2][3]

概述

二维数组,每个元素的长度为t个字节,设为A的第一个元素,即二维数组的行下标从p到m,列下标从q到n,按“行优先顺序”存储时则元素的地址计算为:

按“列优先顺序”存储时,地址计算为:

存放该数组至少需要的单元数为 个字节

二维数组又称为矩阵,行列数相等的矩阵称变方阵。对称矩阵对角矩阵:n阶方阵的所有非零元素都集中在主对角线上。

基本运算算法

(1)转置矩阵://其中A, B是矩阵:

void tramat(matrix A,matrix B){ int i,j;

for(i=0; i<m; i++)

for(j=0;j<n;j++)

B[j]=A[j];

(2)矩阵相加://其中A,B,C是矩阵:

void addmat(matrix C, matrix A, matrix B){

int i, j;

for(i=0; i<m; i++)

for(j=0;j<n;j++)

c[j] = A[j] + B[j];

(3)矩阵相乘://其中A是矩阵,B是矩阵,C为矩阵

void mutmat(matrix C, matrix A, matrix B){

int i, j, k;

for(i=0; i<m; i++)

for(j=0; j<i; j++){

C[j]=0;

for(k=0; k<n; k++)

;

定义

例如:

;

定义a为(3行4列)的数组,b为(5行10列)的数组。注意,不能写成

;

为便于理解特加入一个C语言程序及其运行结果:

1234567891011121314151617181920212223242526272829#include <stdio.h> int main(int argc, const char * argv[]) {         int array = {0};//定义一个二维数组(3行5列)         int temp = 0;//设定一个临时的整型变量,用来给数组赋值         for (int a = 0 ; a < 3; a++)//外层循环给数组的第一维赋值,就是array[x][y]的x         {                 for (int b = 0 ; b < 5; b++)//内层循环给数组的第二维赋值,就是array[x][y]的y                     { temp = temp + 1;//为了让数组的数值不同,让临时变量有自增                           array[a][b] = temp;//二维数组的真正数据                           printf("array[%d][%d] = %d\t",a,b,array[a][b]);//打印出数组                     }         printf("\n");//输出一行后换行         }    return 0; }

运行结果为(为便于观看,整理成表格):

----

概念

C++动态二维数组:

以整形为例,row为行数,col为列数

int **data;//存储二维数组的指针(指向指针的指针。的地址。这样标会更好。因为sizeof(date)结果为4不可能存下二维数组)

123456//以下实现如何申请内存data = new int *[row];for (int k = 0; k < row; k++){data[k] = new int[col];}

12345678//赋值跟普通二维数组一样 例如data = 5; //将二维数组1行1列(C++中称为0行0列)赋值为5//删除内存for (int i = 0 ; i < row; ++i){delete [] data[i]; //此处的[]不可省略}delete [] data;

参考资料 3

  1. 参考 1
  2. 数组 — 中国大百科全书
  3. 参考 3
广告位:底部(ad-bottom)—— 请到中台「公共区块」编辑此内容