lua脚本语言的学习-----------------lua栈操作

为了方便Lua与C交互,比如在C代码中调用Lua函数,Lua官方提供了一系列的API和库。利用这些API,C语言就可以方便从Lua中获取相应的值,也可以方便地把值返回给Lua,当然,这些操作都是通过栈作为桥梁来实现的。
lua中的栈跟汇编中的栈类似,都是由栈顶,栈底构成。
在lua_State中 TValue stack[max_stack_len] 就是定义的栈,以及最大的栈的大小。
执行下面的代码就可以让你的lua栈上呈现图中的情况

lua_pushcclosure(L, func, 0) // 创建并压入一个闭包

lua_createtable(L, 0, 0)        // 新建并压入一个表

lua_pushnumber(L, 343)      // 压入一个数字

lua_pushstring(L, “mystr”)   // 压入一个字符串

在lua中,可以对nil, 整数,浮点数,字符串等一系列变量进行入栈操作。
在lua中,是通过lua_pop()函数来出栈的。

那么如何读取lua栈中的元素呢。有两种方式。
1.从栈顶开始读取
比如lua_tonumber(L , -1);其中的元素是从-1 开始 向-n 递减的 , 对应栈顶到栈底的元素位置。
2.从栈底开始读取数据
比如lua_tonumber(L , 1);这样的代码就是从栈底开始读取数据, 其中的1 到n 就是对应栈底到栈顶的元素位置。

下面来看下具体的使用例子:


    lua_pushnumber(L, 1);  //double
    lua_pushinteger(L, 2); //long long 
    //lua_pop(L, 1);  //出栈操作
    cout << lua_tonumber(L, -1) << endl <<lua_tointeger(L , 1) <<endl;  //取栈中的元素,-1(负数)是从栈顶开始取元素,1(正数)是从栈底取元素

上面的代码先向栈中push了两个元素, 然后分别从栈顶,栈底取元素。

关于栈的简单操作差不多就是这些吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值