今天跟大家分享的小技巧是關於數組遍歷的。通常我們在對數組進行操作時常常會被數組的下標越界問題所困擾。當然在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的結果做爲數組的下標,代碼看起來簡單而實用。
今天的小技巧你學會了嗎?
歡迎關注公衆號:編程外星人