C語言中的邊界計算與不對稱邊界(一)

1、如果一個數組有10個元素,那麼這個數組下標的允許取值範圍是什麼呢?

       這個問題對於不同的程序設計語言有着不同的答案。例如,對於Fortran,PL/I以及Snobol4等程序語言,這個數組的下標取值缺省從1開始,而且這些語言也允許編程者另外指定數組下標的起始值。而對於Algol和Pascal語言,數組下標沒有缺省的起始值,編程者必須顯式的指定每個數組的下界與上界。在標準的Basic語言中,聲明一個擁有10個元素的數組,實際上編譯器分配了11個元素的空間,下標範圍從0到10。

在C語言中,這個數組的下標範圍是從0到9。一個擁有10個元素的數組中,存在下標爲0的元素,卻不存在下標爲10的元素。C語言中的一個擁有n個元素的數組,卻不存在下標爲n的元素,它的元素的下標範圍是從0到n-1爲此,由其他程序語言轉而使用C語言的程序員在使用數組時特別要注意。

例如:

int i, a[10];
for(i=1; i<=10; i++)
    a[i] = 0;
       這段代碼本意是要設置數組a中所有元素爲0,卻產生了一個出人意料的“負效果”。在for語句的比較部分本來是i<10,卻寫成了i<=10,因此實際上並存在a[10]被設置爲0,也就是內存中在數組a之後的一個字的內存被設置爲0。如果用來編譯這段程序的編譯器按照內存地址遞減的方式來給變量分配內存,那麼內存中數組a之後的一個字實際上是分配給了整型變量i。此時,本來循環計數器i的值爲10,循環體內將並不存在的a[10]設置爲0,實際上卻是將計數器i的值設置爲0,這就陷入了一個死循環。



發佈了36 篇原創文章 · 獲贊 15 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章