编程小技巧

    返回首页    发表留言
本文作者:李德强
          技巧二:遍历数组
 
 

        今天跟大家分享的小技巧是关于数组遍历的。通常我们在对数组进行操作时常常会被数组的下标越界问题所困扰。当然在C语言中编译器不会去校验数组下标的边界,也就是说如果你定义了一个具有5个元素的数组,正面的操作方式在C语言中是完全合法的:

int a[5] = {0, 1, 2, 3, 4};
a[-3];
a[-2];
a[-1];
a[5];
a[6];
a[7];

        但是在其它编程语言中编程器通常会校验数组的下标是否越界。但这并不是我们今天要分享的关键内容。我们想要说的是,即使在C语言中编译器不去校验数组下标的合法性,但我们也不希望在使用时取得一个越界的下标。我们在遍历一个数组时通常的做法是这样的:


for (int i = 0; i < 5; i++)
{
    a[i] = something;
}

        这是标准的数组遍历方法,如果我们需要对这个数组循环多次,比如100次的话,我们应该如何编程程序使得数组下标不越界呢?


for (int i = 0, j = 0; i < 100; i++, j++)
{
    if (j >= 5)
    {
        j = 0;
    }
    a[j] = something;
}

        这种做法从逻辑上看没有任何问题,使用变量i来控制循环的次数,而用变量j来控制数组的下标。这样的做法虽然达到了我们的目的,但代码冗长,我们来看一下下面的处理方式:


for (int i = 0; i < 100; i++)
{
    a[i % 5] = something;
}

        巧妙的利用模运算%来对变量i取余,让i % 5的结果做为数组的下标,代码看起来简单而实用。

   

        今天的小技巧你学会了吗?

 

    返回首页    返回顶部
#1楼  点苍双剑,剑气冲天  于 2017年05月16日09:33:30 发表
 
妙~~
#2楼  李德强  于 2017年05月31日13:10:57 发表
 
感谢谭广伟对这个问题的分析,以下是他的回复:

这个例子我觉得不太恰当

这里的循环一百次应该是遍历数组二十回 对于例子的这种情况 宁愿套两层循环 感觉比较清晰 而且以后易改

另外 cpu做取模运算比较费劲 运行时未必会提高性能
#3楼  李德强  于 2017年05月31日13:12:10 发表
 
CPU做取模运算比做加法运算要更加费时,这的确是一个问题,我当时没有考虑到这个问题。谢谢老谭! ^_^
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号