上一节讲了一些基本的Lua应用,下面,我要强调一下,Lua的栈的一些概念,因为这个确实很重要,你会经常用到。熟练使用Lua,最重要的就是要时刻知道什么时候栈里面的数据是什么顺序,都是什么。如果你能熟练知道这些,实际你已经是Lua运用的高手了。当你初始化一个栈的时候,它的栈底是1,而栈顶相对位置是-1,说形象一些,你可以把栈想象成一个环,有一个指针标记当前位置,如果-1,就是当前栈顶,如果是-2就是当前栈顶前面一个参数的位置。以此类推。当然,你也可以正序去取,这里要注意,对于Lua的很多API,下标是从1开始的。这个和C++有些不同。而且,在栈的下标中,正数表示绝对栈底的下标,负数表示相对栈顶的相对地址,这个一定要有清晰的概念,否则很容易看晕了。(栈中数据的存储方式如下图)
注:其实都是从栈底到栈顶,索引数值递增。
下面看一些具体的例子:
lua_pushnumber(m_pState, 11); lua_pushnumber(m_pState, 12); // lua_gettop()这个API是告诉你目前栈里元素的个数 int nIn = lua_gettop(m_pState) int nData1 = lua_tonumber(m_pState, 1); //读取栈底第一个绝对坐标中的元素 int nData2 = lua_tonumber(m_pState, 2); //读取栈底第二个绝对坐标中的元素 int nData3 = lua_tonumber(m_pState, -1); //读取栈顶第一个相对坐标中的元素 int nData4 = lua_tonumber(m_pState, -2); //读取栈顶第二个相对坐标中的元素 printf("[Test]nData1 = %d, nData2 = %d./n, nData3 = %d, nData4 = %d./n"); [Test]nData1 = 11, nData2 = 12, nData3 = 12, nData4 = 11
上述代码的栈中存储如下图:
时间: 2024-11-05 20:35:06