您的位置:首页 > 编程语言 > Lua

lua 的堆栈 与 C++的获取笔录

2016-08-21 22:51 309 查看
static int average(lua_State *L)
{
/* get number of arguments */
int n = lua_gettop(L);
double sum = 0;
int i;

/* loop through each argument */
for (i = 1; i <= n; i++)
{
/* total the arguments */
sum += lua_tonumber(L, i);
}

/* push the average */
lua_pushnumber(L, sum / n);

/* push the sum */
lua_pushnumber(L, sum);

/* return the number of results */
return 2;
}


在C++函数,依次压入平均数av和sum两个结果,在堆栈中也就如下次序:

sum

av

在lua中调用average函数,是这样的情况

av,sum=average(1,2,3)

从上面可以看出,在C++压入的次序和在lua脚本中获取的次序是一致的

而C++获取lua脚本的情况

av,sum=average(1,2,3)

return av,sum

lua_tonumber(L,-1)表示获取栈顶的第一个参数,而这个参数到底是什么呢?

这个参数sum的值,也就是lua脚本中遵循从左往右压入参数,在脚本中是依次压入av,sum

所以在栈顶是这样的情况

sum

av

所以如果要获取av这个值,则需要调用lau_tonumber(L,-2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: