类型说明符 数组名 [常量表达式(行)][常量表达式(列)]
a[2][3] 代表一个2行3列的数组
| 第一列 | 第二列 | 第三列 | |
|---|---|---|---|
| 第一行 | a[0][0] | a[0][1] | a[0][2] |
| 第二行 | a[1][0] | a[1][1] | a[1][2] |
a[i][j] 代表第i+1行,第j+1列
实际上二维数组的存储也是线性的,是在内存单元中开辟一个连续的内存空间
类比一维数组
| 整型单元 | a[0] | a[1] | a[2] |
|---|---|---|---|
| 地址 | 1000 | 1004 | 1008 |
二维数组的存储
| 整型单元 | a[0][0] | a[0][1] | a[0][2] | a[1][0] | a[1][1] | a[1][2] |
|---|---|---|---|---|---|---|
| 地址 | 1000 | 1004 | 1008 | 1012 | 1016 | 1020 |
1. 第一种
int a[2][3]={1,2,3,4,5,6};
| 第一列 | 第二列 | 第三列 | |
|---|---|---|---|
| 第一行 | 1 | 2 | 3 |
| 第二行 | 4 | 5 | 6 |
2. 第二种
int a[2][3]={
{1,2,3},
{4,5,6}
};
1. 第一种
int a[3][4]={1};
//其他所有元素则默认为0;
2. 第二种
//这种只适合部分编译器
int a[3][4]={
{1,2,3,4},
{},
{9,10,11,12}
}
3. 第三种
int a[3][4]={
{1,2,3,4},
{5,6},
{9,10,11,12}
}
4. 第四种
int a[3][4]={
{1,2,3,4},
{5,6}
}
5. 第五种
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
//这种编译器会根据输入的元素,自动计算这是个几行4列的数组;
//注意不能省略列数!!!
数组名[行标][列标]
a[0][1]=5;
a[i+3][a[0][5]]=a[0][1]*2;
下标可以是整型表达式
int main(void)
{
int a[3][4]={
{1, 2, 3, 4},
{5, 6, 7, 8},
{9,10,11,12}
};
int i,j;
for(i=0;i<3;++i)
{
printf("第%d行的元素是:\n",i+1);
for(j=0;j<4;++j)
{
printf("%-5d",a[i][j]);
//-5表示按左对齐,且占5个格
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
/*
输出函数
*/
void show(int a[][5])
{
int i,j;
for(i=0;i<6;++i)
{
printf("第%d行的元素是:\n",i+1);
for(j=0;j<5;++j)
{
printf("%-5d",a[i][j]);
}
printf("\n");
}
}
/*
求每一行的最大元素
*/
void max_row(int a[][5])
{
int i,j;
int k = 0;
for(i=0;i<6;++i)//i<行数
{
for(j=0;j<5-1;++j)//j<列数-1
{
if(a[i][j]>a[i][j+1])
{
k=a[i][j+1];
a[i][j+1]=a[i][j];
a[i][j]=k;
}
}
printf("第%d行最大元素是:%d\n",i+1,a[i][4]);//a[行][最后一列列标]
}
}
/*
求该数组的最大元素,并返回其下标。
*/
void max(int a[][5])
{
int max = a[0][0];
int i,j,row,colum;
for(i=0;i<6;++i)
{
for(j=0;j<5;++j)
{
if(a[i][j]>max)
{
max=a[i][j];
row=i;
colum=j;
//printf("最大值是:%d\n其行标是:%d,其列标是:%d\n",a[i][j],i,j);
}
}
}
printf("该数组中元素的最大值是:%d\n其行标是:%d,其列标是:%d\n",max,row,colum);
}
int main(void)
{
int a[6][5]={
{1, 2, 10, 4, 6},
{5, 22, 7, 8, 9},
{9,6,11,12,100},
{33,54,32,99,30},
{77},
{99}
};
show(a);
max_row(a);
max(a);
system("pause");
return 0;
}
指针学过后再补充
| 1 | 2 | 4 | 7 |
|---|---|---|---|
| 2 | 3 | 5 | 8 |
| 4 | 5 | 6 | 9 |
| 7 | 8 | 9 | 10 |
如上图所示,这是一个对称矩阵
int main(void)
{
int a[4][5] = {
{1,2,4,7},
{2,3,5,8},
{4,5,6,9},
{7,8,8,10},
{0}
};
int i=0;
int j=0;
for(i=0;i<4;++i)
{
for(j=0;j<4;++j)
{
if(a[i][j]!=a[j][i])
{
printf("这不是一个对称矩阵!");
return 0;
}
}
}
printf("这是一个对称矩阵!");
return 0;
}
不存在
因为内存是线性一维的
n维数组可以当做每个元素是n-1维数组的一维数组
以二维数组为例:
int a[3][4]
该数组是含有3个元素的一维数组
只不过每个元素都相当于一个包含4个元素的一维数组。
本文章使用limfx的vsocde插件快速发布