我们前两篇文章都提到了lua的堆栈,那么这篇文章我们将来简单介绍一下lua的堆栈到底为何物?
我们来介绍一下lua堆栈的索引,因为我们在很多操作里面都涉及到堆栈的索引,比如上一篇文章中的我们要从堆栈中取得一个字符串,就必须给出堆栈索引。如下面的代码:
/* 获取栈顶的值 */
const char* str=lua_tostring(pL,1);
那么lua的堆栈索引是如何定义的呢?下面我们来看一张图:
我们可以看到堆栈的索引方式有两种,一种是整数索引,一种是负数索引。发现有一个规律:
(1)正数索引,栈底是1,然后一直到栈顶是逐渐+1,最后变成9(9大于1)
(2)负数索引,栈底是-9,然后一直到栈顶是逐渐+1,最后变成-1(-1大于-9)
可是,为什么要用两种方式呢?
有一点好处就是:
(1)正数索引,不需要知道栈的大小,我们就能知道栈底在哪,栈底的索引永远是1;
(2)负数索引,不需要知道栈的大小,我们就能知道栈顶在哪,栈顶的索引永远是-1.