免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4888 | 回复: 2
打印 上一主题 下一主题

[C] 问一个新手问题遍历数组 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-13 23:09 |只看该作者 |倒序浏览
c语言遍历数组的时候为什么是从左往右的遍历,从右到左为啥不行,别说让我试一下啊,只想听一下理论解释,a[n][j][k]都是这样循环的
for( i = 0; i < n; i++){
    for( i = 0; i < j; i++){
         for( i = 0; i < k; i++{

        }
    }
}
先循环k,然后循环j,最后n行不行啊

论坛徽章:
2
嗜杀者
日期:2015-11-25 10:44:3015-16赛季CBA联赛之北京
日期:2016-03-20 19:50:17
2 [报告]
发表于 2014-06-14 07:11 |只看该作者
本帖最后由 hitcser01 于 2014-06-14 11:37 编辑

我也是新手, 发表一下看法.
1.不知道楼主怎样得出的结论"从右到左不行". 你的确可以试一试嘛.
2.C语言数组按行主序存储,也就是先存第一行,再存第二行. "从左到右"有利于缓存命中. 缓存的速度接近寄存器, 数组元素非常多时, 节约时间的效果很明显.
#

可以看一下我这里的实验效果:
  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. #define RAW       10000 //如果有运行错误可以把这2个值减小些
  4. #define COL       50000
  5. int a[RAW][COL];//不需要数据的正确性,只需要访问该位置即可验证缓存效果,所以无须初始化.当然,这里全局数据,自动初始化为0了...可以试一试把这个大数组放在函数里,嘿嘿.
  6. int main(int argc, char *argv[])
  7. {
  8.     int sum=0;
  9.     int i, j;
  10.     if(1==argc){
  11.         for(i=0;i<RAW;i++){
  12.             for(j=0;j<COL;j++){
  13.                 sum += a[i][j];//溢出也没事...
  14.             }
  15.         }
  16.     }
  17.     else{
  18.         for(i=0;i<COL;i++){
  19.             for(j=0;j<RAW;j++){
  20.                 sum += a[j][i];//溢出也没事...
  21.             }
  22.         }
  23.     }
  24.     printf("sum:%d\n", sum);
  25.     return 0;
  26. }
复制代码

  1. % time ./a.out
  2. sum:0
  3. ./a.out  1.73s user 0.24s system 99% cpu 1.974 total
复制代码

  1. % time ./a.out 1
  2. sum:0
  3. ./a.out 1  13.39s user 0.30s system 99% cpu 13.776 total
复制代码

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2014-06-14 09:12 |只看该作者
二楼说得对。不过注释中让人把数组放函数里是等着再来问你问题么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP