1.定义,初始化
【存储类型】数据类型 arr[行标][列标];列标是必须写的
2.元素引用
数组名[行][列]
3.存储形式
顺序存储,一行一行的连续存储。
Int a[5][5]={{1,2},{3,4,5},{6},{7}};
Int b[5][5]={1,2,3,4,5,6,7};
a,b是不同的两个数组,b的1,2,3,4,5在第一行内6,7在第二行。
4.深入理解:
int a[][];其中a是指向的第1行的起始位置。
a+1是指向第二行的起始位置。
“&二维数组名”就指向了整个二维数组。
&a+1是跳出了整个二维数组的下一个地址
二维数组补充:
深入理解一维数组,二维数组的& ,*的含义
int main()
{
int a[3]={1,2,3};
int b[2][3]={1,2,3,4,5,6};
printf("%p, %p, %d\n",a,&a,*a);
printf("%p, %p, %d\n",a+1,&a+1,*a+1);
printf("%p, %p, %p, %d\n",b,*b,&b,**b);
printf("%p, %p, %p, %d, %d\n",b+1,*b+1,&b+1,**b+1,**(b+1));
printf("%p, %p, %p, %p\n",*b+1,*(b+1),&b,&b+1);
exit(0);
}
执行:
0x7ffcb8006f80, 0x7ffcb8006f80, 1
0x7ffcb8006f84, 0x7ffcb8006f8c, 2
0x7ffcb8006f60, 0x7ffcb8006f60, 0x7ffcb8006f60, 1
0x7ffcb8006f6c, 0x7ffcb8006f64, 0x7ffcb8006f78, 2, 4
0x7ffcb8006f64, 0x7ffcb8006f6c, 0x7ffcb8006f60, 0x7ffcb8006f78
二维数组例题:
1.行列互换
#define M 2
#define N 3
static void change()
{
int arr[M][N]={1,2,3,4,5,6},b[N][M];
int i,j;
for(i=0;i<M;i++ )
{
for(j=0;j<N;j++)
{
printf("%d ",arr[i][j]);
b[j][i] = arr [i][j];
}
printf("\n");
}
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
执行:
[tom@CentOS7 arr]$ ./arrb
1 2 3
4 5 6
1 4
2 5
3 6
2.求最大值及其所在位置,求各行与各列和
static void max_add()
{
int a[M][N]={5,6,2,7,9,3};
int d[N][M]={5,6,2,7,9,3};
int max = a[0][0] ,i,j,row,column;
int add[M+1][N+1]={0};
for(i=0;i<M;i++ )
{
for(j=0;j<N;j++)
{
printf("%d ",a[i][j]);
if(max<a[i][j])
{
max = a[i][j];
row=i;
column=j;
}
add[i][j]=a[i][j];
add[M][N]+=a[i][j];
add[i][N]+=a[i][j];
add[M][j]+=a[i][j];
}
printf("\n");
}
printf("max=%d,i=%d,j=%d\n",max,i,j);
for(i=0;i<M+1;i++)
{
for(j=0;j<N+1;j++)
{
printf("%d ",add[i][j]);
}
printf("\n");
}
}
[tom@CentOS7 arr]$ ./arrb
5 6 2
7 9 3
max=9,i=2,j=3
5 6 2 13
7 9 3 19
12 15 5 32
矩阵乘积:
static void max_add()
{
int a[M][N]={5,6,2,7,9,3};
int d[N][M]={5,6,2,7,9,3};
int max = a[0][0] ,i,j,row,column;
int add[M+1][N+1]={0};
for(i=0;i<M;i++ )
{
for(j=0;j<N;j++)
{
printf("%d ",a[i][j]);
if(max<a[i][j])
{
max = a[i][j];
row=i;
column=j;
}
add[i][j]=a[i][j];
add[M][N]+=a[i][j];
add[i][N]+=a[i][j];
add[M][j]+=a[i][j];
}
printf("\n");
}
printf("max=%d,i=%d,j=%d\n",max,i,j);
for(i=0;i<M+1;i++)
{
for(j=0;j<N+1;j++)
{
printf("%d ",add[i][j]);
}
printf("\n");
}
}
om@CentOS7 arr]$ ./arrb
1 5
4 11