首页 > C > 数组 阅读:57,774

二维数组的初始化与遍历

二维数组的初始化可以为下面的形式:

int a[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };

上面的方式就初始化了一个53列的数组。

对于二维数组的遍历,可以先列后行(即先遍历列,再遍历行),也可以先行后列(即先遍历行,再遍历列)进行。比如,对于一个mn列的整型二维数组a[m][n]进行遍历:

//先行后列:

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

{

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

         {

                   printf(“%d/n”, a[i][j]);

         }

}

//输出为:a[0][0] a[0][1] a[0][2] a[0][3]…a[0][9]...

 

//先列后行:

for(int i = 0; i < n;i++)

{

         for(int j = 0; j < m; j++)

         {

                   printf(“%d/n”, a[j][i]);

         }

}

//输出为:a[0][0] a[1][0] a[2][0] a[3][0] a[4][0]

那么,这两种遍历方法,哪个更高效一些呢?

数组的元素由于是连续存放在内存中的,所以支持随机访问(即直接给出元素的下标,即可计算并取得其值)。如果数组比较小,能够在一个内存页中存放下,那么在对数组进行访问的过程中不会发生缺页中断等情况,因此先行后列和先列后行访问数组的效率差别不大。但是如果数组的数据比较大,一个内存页无法容纳下,由于数组是按行的顺序存放的,同一列的数据就有可能存放在不同的页中,那么先列后行的访问将引起更多的缺页中断,降低了遍历的效率。

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注