今天跟大家分享的小技巧是关于数组遍历的。通常我们在对数组进行操作时常常会被数组的下标越界问题所困扰。当然在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的结果做为数组的下标,代码看起来简单而实用。
今天的小技巧你学会了吗?
欢迎关注公众号:编程外星人