天天看點

【Cocos2d-x lua篇003】簡單解析Lua的堆棧

在這裡我僅簡單解釋一下Lua堆棧的索引,因為我們在很多操作裡都涉及到堆棧的索引,比如上一章中我們要從堆棧中取得一個字元串,就必須給出堆棧索引:

[cpp]  view plain copy print ?

  1.     const char* str = lua_tostring(pL, 1);  

如果對堆棧索引不清晰的話,将會很糾結。

《遊戲人工智能程式設計案例精粹》一書的200頁,有一張圖,很好地表達了Lua的堆棧索引是如何定義的,我照着畫了一張:

【Cocos2d-x lua篇003】簡單解析Lua的堆棧

我們很明顯的看到堆棧的索引方式有兩種,一種是正數索引,一種是負數索引。

并且咋一看,好像兩種索引方式的規則是相反的,其實不然,我們來認真數數:

1. 正數索引,棧底是1,然後一直到棧頂是逐漸+1,最後變成9(9大于1)

2. 負數索引,棧底是-9,然後一直到棧頂是逐漸+1,最後變成-1(-1大于-9)

對吧,一般像旁白那種人才會認為是相反的規則。

(旁白:吐槽是我的專利= =!)

大家不覺得奇怪嗎?為什麼要用兩種方式?好混亂~!

我也覺得,但是有一點好處,看看它們各自的好處:

1. 正數索引,不需要知道棧的大小,我們就能知道棧底在哪,棧底的索引永遠是1

2. 負數索引,不需要知道棧的大小,我們就能知道棧頂在哪,棧頂的索引永遠是-1