數組下標爲負數

        在使用數組的時候,相信大多數人首先想到的是“數組是從0開始的,數組的下標必須大於或等於0”,但是在處理一些數值計算的問題的時候,很可能會遇到下標爲負數的問題,比如,在做9/7浮點小波變換的時候會有:x(m) =  x(-m) ,m<0,在這種情況下,當要循環迭代計算的時候,就需要判斷m是否爲負數,這個還是有點麻煩的。

        這個時候,如果我們知道m的最小值,比如-4的時候,就可以考慮直接讓數組的下標爲負數了,具體的操作是:爲數組x分配空間的時候,爲其多分配4個位置,然後聲明一個指針指向x+4,然後讓b(-i) = b(i) ,i屬於[1,4],這樣就可以在用到x的地方用b替代之,而不用檢查下標的值了。但是,在這麼做的時候一定要注意不要越界。

        這種用法的根據是C語言對數組和下標操作符的定義,C語言的數組其實是指針,而下標運算符其實解釋成了指針加上偏移量,只是偏移量的單位是該指針的類型。

        比如,int a[20][43],a[4][7]等價於a+4*43+7,這就可以解釋爲什麼上面的b[-3]爲什麼行得通了,b=x+4,則b[-3]等價於x+4-3,其實是數組x的第二個元素。

       


        關於下標運算符的更深的闡述可以看看http://blog.csdn.net/supermegaboy/article/details/4855000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章