lua栈相关操作函数

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
lua栈相关操作函数
学习目标:
了解lua栈相关操作
lua_pushnumber   //#define LUA_NUMBER double
lua_pushinteger//long long //dword     
lua_pop          //从栈顶弹出N个元素 改变栈顶指针地址
lua_tonumber     //取栈里的元素 转换成double类型返回 用%f
lua_tointeger    //转成整数 用%d

	lua 使用一个虚拟栈来和c传递值.栈上的每个元素都是一个 lua 值(nil,数字,字符串,等等).
	无论何时 在lua中被调用的函数都得到一个新的栈,这个栈独立于c函数本身的堆栈 也独立于以前的栈
	(注释:在c函数里,用lua api 不能访问到lua 状态机中本次调用之外的堆栈中的数据) 它里面包含了 lua
传递给c函数的所有参数,而 c 函数则把要返回的结果也放入堆栈以返回给调用者
	方便起见,所有针对栈的 api 查询操作都不严格遵循栈的操作规则 .而是可以用一个索引来指向栈上的任何元素
正的索引值的是栈上是绝对位置(从一开始); 负的索引则指从栈顶开始的偏移量.

	每个call函数 都有一个独立栈
	负数:栈顶
	正数:栈底开始编号
lua_pop(L,2) 弹出2个元素
	
	lua_pushinteger(L, 1);//栈底   1
	lua_pushinteger(L, 2);
	lua_pushinteger(L, 3);
	lua_pushinteger(L, 4);
	lua_pushinteger(L, 5);//栈顶  -1
	printf("%f\n", lua_tonumber(L, -1));

	lua_pushinteger(L, 1);
	lua_pushinteger(L, 2);
	lua_pushinteger(L, 3);
	lua_pushinteger(L, 4);
	lua_pushinteger(L, 5);
	lua_pop(L, 2);//从栈顶出栈
	printf("%d\n", lua_tointeger(L, 1));

#include "stdafx.h"
#include"process.h"
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
extern "C" int caozuozhan_lua(lua_State*L)
{
	lua_pushinteger(L, 1);//栈底   1
	lua_pushinteger(L, 2);
	lua_pushinteger(L, 3);
	lua_pushinteger(L, 4);
	lua_pushinteger(L, 5);//栈顶  -1
	//printf("%f\n", lua_tonumber(L, -1));
	//lua_pushnumber(L, 1);
	//lua_pushnumber(L, 2);
	//lua_pushnumber(L, 3);
	//lua_pushnumber(L, 4);
	//lua_pushnumber(L, 5);
	lua_pop(L, 2);//从栈顶出栈
	printf("%d\n", lua_tointeger(L, -1));
	return 1;
}

int main()
{
	lua_State*L = luaL_newstate();
	luaL_openlibs(L);
	lua_register(L, "caozuozhan", caozuozhan_lua);
	luaL_dostring(L, "caozuozhan()");
	//luaL_dofile(L, "lisaisai.txt");
	lua_close(L);
	system("pause");
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值