5.3二维数组的定义和引用

实际应用中有些数据需要依赖两个因素才能唯一地确定。例如有3个学生,每个学生有5门课程的成绩,显然,成绩数据是一个二维表,如下表所示

如果想表示第3个学生第4门课程的成绩,就需要指出学生的序号和课程的序号两个因素,在数学上以S3,4表示。在C/C++中要用S[2][3]来表示(注意下标从0开始),它代表数据90
具有两个下标的数组称为二维数组

1.定义二维数组 

定义二维数组的一般形式为:
数据类型 数组名[常量表达式][常量表达式]
第一个常量表达式表示行的数目,第二个常量表达式表示列的数目
如:
int a[3][4];  //定义a为3行4列的二维数组
float b[2][5]; 

int a[3][4];  //定义a为3行4列的二维数组
对数组a,一共有3×4=12个元素,其中第0行的4个元素是:a[0][0]、a[0][1]、a[0][2]、a[0][3]
这12个元素在内存中的存储顺序是:按行存放,即在内存中先按顺序存放第0行的4个元素,然后是第1行的4个元素,最后是第2行的4个元素。如右图所示 

 int a[3][4];  //定义a为3行4列的二维数组
而且这12个元素在内存中也是连续存放的,如果a[0][0]的地址是2000(十进制),则a[0][1]的地址是2004,…,最后一个元素a[2][3]的地址是2044。如下图所示:

2.引用二维数组的元素

二维数组元素的引用形式为:
数组名[行下标][列下标]
如:a[2][3] = b[3][2] + 1;

3.二维数组的初始化

二维数组的初始化有两类方法:分行初始方法和按元素排列顺序初始化方法

1)分行初始方法:在花括号内再以花括号的形式将每行元素列举出来,有3种形式
①全部元素初始化。例如:inta[2][3]={{1,2,3},{4,5,6}}:
②部分元素初始化。例如:int a[2][3]={{1,2},{4};  //a[0][2]、a[1][1]、a[1][2]由编译器自动赋值为0
③初始化时第一维长度省略。例如:inta[ ][3]={{1},{4,5}};
第一维下标是根据最外围花括号内花括号的对数来确定的,比如上述例子等效于:
int a[2][3]={{1},{4,5}};
注意:第二维的长度不能省略! 

2)按元素排列顺序初始化方法:把所有元素按元素的排列顺序在花括号内列举出来,同样也有3种形式
①全部元素初始化。例如:int a[2][3]={1,2,3,4,5,6};
②部分元素初始化。例如:int a[2][3]={1,2,4};
③初始化时第一维长度省略。例如:int a[ ][3]={1,2,3,4,5,6,7,8};
花括号内8个数,前3个是第0行,中间3个是第1行,最后2个是第2行,编译器对第2行的最后1个元素a[2][2]自动赋值为0。这样该数组一共有3行,即上述语句等效于:int a[3][3]={1,2,3,4,5,6,7,8};
同样要注意:第二维的长度不能省略! 

4.用循环处理二维数组

跟一维数组一样,二维数组的一个优势是可以通过循环对所有元素进行统一的处理。这种统一处理有时称为遍历:就是访问每个元素一次且仅一次,不能重复也不能由遗漏。遍历二维数组需要采用二重循环。例如,输出二维数组的每个元素,就需要访问每个元素一次且仅一次
假设有一个3×4的二维数组,则遍历该数组要用到下面的2重循环: 

int i, j; //循环变量
for(i=0;i<3;i++){ //遍历第0行~第2行
    for(j=0;j<4;j++){ //遍历每行的第0列~第3列元素
        //在此处访问a[i][j],保证能访问每个元素一次且仅一次
    }
}
  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值