二维数组:
定义一个N行M列的二维数组:
T a[N][M];//T:类型名,如char,double,int等等。
//M,N:正整数,或值为正整数的常量表达式
- 每一个元素都是一个类型为T的变量
- NxM个元素在内存里是一个哎一个连续存放的。
- 数组占用了一片连续的、大小总为NxMxsizeof(T)字节的存储空间。
- 表达式“sizeof(a)”的值就是整个数组的体积,即NxMxsizeof(T)。
访问数组元素的方法:
数组名[行下标][列下表]
eg:a[i][j]//访问第i行第j列
行下标和列下表都从0开始
二维数组的存放方式
数组T a[N][M] 每一行都有M个元素
第i行的元素就是 a[i][0]、a[i][1]......a[i][M-1]。同一行的元素,在内存中是连续存放的
第j列的元素是,a[0][j]、a[1][j]......a[N-1][j]。
a[0][0]是数组中地址最小的元素。如果a[0][0]存放在地址n,则a[0][0]存放在地址n,则a[i][j]存放地址就是
n+i x M x sizeof(T)+j x sizeof(T)
二维数组的每一行,实际上都是一个一维数组。
a[0],a[1]都可以看做是一个一维数组的名字,可以直接当一维数组使用。
数组的遍历
#define ROW 20
#define COL 30
int a[ROW][COL];
for( int i=0;i<ROW;++i){
for( int j=0;j<COL;++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
矩阵的乘法
#include<iostream>
using namespace std;
#define ROWS 8
#define COLS 8
int a[ROWS][COLS];
int b[ROWS][COLS];
int c[ROWS][COLS];//结果
int main()
{
int m,n,p,q;
cin>>m>>n;
for(int i=0;i<m;++i)//读入a矩阵
for(int j=0;j<n;++j)
cin>>a[i][j];
cin>>p>>q;
for(int i;i<p;++i)//读入b矩阵
for(int j=0;j<q;++j)
cin>>b[i][j];
for(int i=0;i<m;++i){
for(int j=0;j<q;++j){
c[i][j]=0;
for(int k=0;k<n;++k)
c[i][j]+=a[i][j]*b[k][j];
}
}
for(int i=0;i<m;++i){
for(int j=0;j<q;++j){
cout<<c[i][j]<<" ";
}
cout<<endl;
}
return 0;
}