為什麼編程語言中,循環計數器的默認變數都是「i」?

似乎所有語言的教學代碼中,循環體的計數器默認都是使用變數i,j,k ,請問這是為什麼?


數學中的下標一般都是習慣用i j k,我想程序中這種喜歡應該也是來自於數學


index 的第一個字母

有了i,然後就用j k l m...

iterator(迭代器)更像是一個現代語言的概念,在早期語言FORTRAN, C的時代,循環計數器還是index的思維方式

有人問過這個問題

Why do most of us use "i" as a loop counter variable?

最多人贊成的1 跟隨數學公式 2 index

數學公式裡面i還是index的意思


Updated 12.21 17:09

剛看了下目前排名第一的答案里的鏈接:

When they designed Fortran, they (apparently) decided to allow the same,
so all variables starting with "I" through "N" default to integer, and
all others to real (floating point). For those who"ve missed it, this is
the source of the old joke "God is real (unless declared integer)".

臨時變數喜歡起名i, j, k.

這是從Fortran傳來的。

Fortran 語言默認以 I, J, K, L, M, N為第一個字母的變數名是整型,其它字母開頭的變數是實型。

所以呢,用個臨時變數,第一想到的就是i, j, k。

就這麼簡單,寫個臨時變數誰會想那麼多?

要是真要有意義,為什麼不完整的寫個index,或者recordCount?

Fortran作為最古老的語言之一,留下不少「傳統」。

以前在一本書上看到過,不過出處忘掉了,似乎是本講C的書,歡迎知識淵博的同學補充。


就像我們設直線方程時普遍設成y=kx+b,習慣問題。


在 C 語言(以及由C語法派生出的各種語言)中,最古老最習慣的變數命名方式,是使用一個變數的類型來表示變數本身。

例如 char c; int i; long l; string s; pointer p; MSG msg; 等等。

姑且不論這個習慣的好壞,他確實非常廣泛的長時間的存在著。

這些語言的循環變數用 i ,原因是循環計數器通常為整數。而整數的類型是 int,第一個字母是 i 。當循環計數器不是 int 類型時,通常可能會使用其他字母,例如使用 char 為循環變數類型的時候我們可能使用 c 作為變數名。

至於其他語言為什麼也用到 i,很可能是受到了 C 語言編程經驗的影響,僅此而已。

確實有些語言不使用 i 的,不過他們一般可能比 C 語言誕生得更早,或者其發展過程中絲毫沒有受到 C 語言的影響。


最早設計計算機語言的都是數學家。數學中的約定是下標有i、j的順序使用。所以編程語言中沿用了這一習慣。


個人認為應該是,iterator(迭代器)所以才選用i作為默認循環變數吧。之所以為什麼後面是j,k,l,應該是以i開了頭,所以後面就順序做了。

----------------------------------------------------------

補充:

看了大家的回答,也越發覺得i的來源是index或idx比較靠譜。不過看從什麼角度理解吧,從數據下表的角度來看,i確實是index,但是如果從循環角度來講,i如果是按index來理解有點兒不易於接受。


我可以很負責任的告訴樓主,

大部分的語言循環的變數沒有所謂的默認變數的說法,比如 C 和 C++ 和 Java 等。

部分語言有默認變數,但是不是 i, 比如 Perl。

在 Perl 里對輸入做循環處理的時候可以用

while ( &<&> ) {

print;

}

這裡所用的默認變數就是 $_ ,因為使用了默認變數,所以不需要再指定變數名。

而 C 語言之類的循環變數由寫代碼的人設置,並沒有默認變數的概念。

難道我一個 C 的 for 循環可以寫成

for ( = 0; &<= 100; ++)

這樣?


猜循環為什麼用ijk做下標


依稀覺得和fortran有關係?

fortran取變數名時有一定限制。。

僅僅是一個思路 還請大神作答


index, iterator...


個人感覺是約定俗成,大家都這麼用看見就知道是啥


i代表:index


插句題外話吧

我覺得如果一個程序員在工作中仍使用i ,j,k,l這樣的變數命名的話。。。剛開始學習編程另算

為了保密而刻意降低可讀性的人也應該不至於這麼做。。。


推薦閱讀:

C 語言中字元串常量的好處在哪裡?
C 語言如何判斷等差數列?
在C語言中,math.h中定義的各種數學函數在電腦上具體是怎麼實現的?
數據結構中所講的動態分配的數組如何在 C 語言中實現?
c語言是否可以通過調用void函數來完成對數組的賦值?

TAG:編程語言 | 編程 | C編程語言 | CC |