Lua的堆棧淺析
上一章傳送門:http://www.dbjr.com.cn/article/55092.htm
經(jīng)過上一章的講解,相信大家也看到了,Lua的堆棧是很重要不可或缺的,就像我的旁白一樣(旁白:他竟然贊我了。。。好羞澀~)。雖然看起來沒什么用,但是少了又絕對(duì)不行。
(旁白:你妹紙的,你這算是贊人嗎?)
在這里我僅簡單解釋一下Lua堆棧的索引,因?yàn)槲覀冊(cè)诤芏嗖僮骼锒忌婕暗蕉褩5乃饕?,比如上一章中我們要從堆棧中取得一個(gè)字符串,就必須給出堆棧索引:
/* 獲取棧頂?shù)闹?*/
const char* str = lua_tostring(pL, 1);
如果對(duì)堆棧索引不清晰的話,將會(huì)很糾結(jié)。
《游戲人工智能編程案例精粹》一書的200頁,有一張圖,很好地表達(dá)了Lua的堆棧索引是如何定義的,我照著畫了一張:
(旁白:好丑~!而且還打了一個(gè)廣告,別以為我不知道~?。?br />
我們很明顯的看到堆棧的索引方式有兩種,一種是正數(shù)索引,一種是負(fù)數(shù)索引。
并且咋一看,好像兩種索引方式的規(guī)則是相反的,其實(shí)不然,我們來認(rèn)真數(shù)數(shù):
1. 正數(shù)索引,棧底是1,然后一直到棧頂是逐漸+1,最后變成9(9大于1)
2. 負(fù)數(shù)索引,棧底是-9,然后一直到棧頂是逐漸+1,最后變成-1(-1大于-9)
(旁白:這,這還真的是一樣的~!好神奇?。?/p>
對(duì)吧,一般像旁白那種人才會(huì)認(rèn)為是相反的規(guī)則。
(旁白:吐槽是我的專利= =!)
大家不覺得奇怪嗎?為什么要用兩種方式?好混亂~!
我也覺得,但是有一點(diǎn)好處,看看它們各自的好處:
1. 正數(shù)索引,不需要知道棧的大小,我們就能知道棧底在哪,棧底的索引永遠(yuǎn)是1
2. 負(fù)數(shù)索引,不需要知道棧的大小,我們就能知道棧頂在哪,棧頂?shù)乃饕肋h(yuǎn)是-1
(旁白:又好像有那么一點(diǎn)道理。。。)
OK,本章到此結(jié)束。
- java自帶的工具Jstack截取進(jìn)程中的堆棧信息
- Java使用Deque實(shí)現(xiàn)堆棧的方法
- 深入JVM剖析Java的線程堆棧
- 輸出java進(jìn)程的jstack信息示例分享 通過線程堆棧信息分析java線程
- java堆棧類使用實(shí)例(java中stack的使用方法)
- Java編程思想里的泛型實(shí)現(xiàn)一個(gè)堆棧類 分享
- 關(guān)于PHP堆棧與列隊(duì)的學(xué)習(xí)
- python實(shí)現(xiàn)堆棧與隊(duì)列的方法
- Go語言的隊(duì)列和堆棧實(shí)現(xiàn)方法
- Java實(shí)現(xiàn)簡單堆棧代碼
相關(guān)文章
Lua檢測數(shù)組(tabble)中是否包含某個(gè)值
這篇文章主要介紹了Lua檢測數(shù)組(tabble)中是否包含某個(gè)值以及l(fā)ua 判斷一個(gè)字符是否存在某個(gè)數(shù)組兩個(gè)方法,需要的朋友可以參考下2015-05-05Lua協(xié)程(coroutine)程序運(yùn)行分析
這篇文章主要介紹了Lua協(xié)程(coroutine)程序運(yùn)行分析,本文講解分析了一段lua 協(xié)程代碼是如何運(yùn)行的,需要的朋友可以參考下2015-05-05