這是一個存取陣列的程式片段,不過在三種語言中都有類似的錯誤。在 for 迴圈中,應該使用小於號 (<) 而非小於等於號 (<=) 來判斷迴圈是否要繼續執行。因為陣列的索引是從 0 開始的,所以在使用小於等於號時,會多一次存取陣列的動作,導致存取超過陣列範圍的記憶體,可能造成系統錯誤。
以下是修正後的正確程式碼:
C:
int a[] = {0, 1, 2, 3};
for (i=0; i<sizeof(a)/sizeof(int); i++)
printf("%d", a[i]);
Java:
int[] a = {0, 1, 2, 3};
for (i=0; i<a.length; i++)
System.out.println(a[i]);
Javascript:
var a = [0, 1, 2, 3];
for (i=0; i<a.length; i++)
document.write(a[i]);
在程式語言中,變數型態的繫結 (Type Binding) 是指變數的資料型態在編譯時期就已經決定,例如在 C 語言中,變數在宣告時就必須指定型態。而記憶體配置的繫結 (Storage Binding) 則是指變數所使用的記憶體空間何時被分配、何時被釋放。一般來說,有靜態配置和動態配置兩種方式:
靜態配置:在編譯時期即分配好記憶體空間,例如在 C 語言中,全域變數和靜態變數就是以靜態配置方式分配記憶體。
動態配置:在執行時期根據需要分配記憶體空間,例如在 C 語言中,使用 malloc 函式來分配記憶體空間就是動態配置方式。