向栈中压入数据:

lua_pushnil(lua_State*);

lua_pushboolean(lua_State*, bool);

lua_pushnumber(lua_State*, lua_Number);

lua_pushinteger(lua_State*, lua_Integer)

lua_pushlstring(lua_State*, const char*, size_t);

lua_pushstring(lua_State*, const char*);

获取栈中元素的类型

lua_type(lua_State* L, int index);

类型包括 LUA_TNIL, LUA_TBOOLEAN, LUA_TNUMBER, LUA_TSTRING, LUA_TTABLE, LUA_TFUNCTION, LUA_TUSERDATA

验证栈中的元素类型;

lua_is*(lua_State* L, int index)

其实有了lua_type()完全可以自己写类型验证的 每必要使用lua提供的API

比如可以定义

 bool lua_is_number (lua_State* L, int index)  {
return lua_type(L, index) == LUA_TNUMBER ? true : false;
}

所以完全是可以利用lua_type来自行定义对栈中元素的验证的。

获取栈中元素的类型的字符串表示:

lua_typename(lua_State*, int )这里的int值是通过lua_type()获取到的值

其实这些都可以通过lua_type(lua_State*)来进行实现

const char*  lua_type_str(int lua_type) {
static char type[LUA_TYPE_LEN_MAX];
switch (lua_type) {
case LUA_TNIL:
strcpy(type, "nil");
break; case LUA_TBOOLEAN:
strcpy(type, "boolean");
break; case LUA_TNUMBER:
strcpy(type, "number");
break; case LUA_TSTRING:
strcpy(type, "string");
break; case LUA_TTABLE:
strcpy(type, "table");
break; case LUA_TTHREAD:
strcpy(type, "thread");
break; case LUA_TFUNCTION:
strcpy(type, "function");
break; case LUA_TUSERDATA:
strcpy(type, "userdata");
break; default:
strcpy(type, "unknown");
break;
}
return type;
}

这样就可以实现你自己的栈元素类型的字符串显示了

获取指定位置的元素可以使用lua_to*(lua_State*, int )

int  lua_toboolean(lua_State*, int);

lua_Number lua_tonumber(lua_State*, int);

lua_Integer lua_tointeger(lua_State*, int );

const char* lua_tolstring(lua_State*, int, size_t length);

lua_gettop(lua_State*)      得到栈中元素的个数

lua_settop(lua_State*, int index)

设置栈中元素的个数,如果设置的值比当前栈中元素的个数多,则将多出的那部分全部丢弃,如果设置的值比当前栈中元素个数多,则将新加的值全部设置为nil.

lua_pushvalue(lua_State*, int index) 将index位置的值的副本压入栈顶

lua_remove(lua_State* L, int index)将指定位置的元素删除,并且其上的所有元素下移

lua_insert(lua_State*, int index) 将指定位置之上的元素上移,空出该位置,并将栈顶元素移到此处

lua_replace(lua_State*, int index)将栈顶元素弹出,并将其设置到指定的索引上。

lua_pop是以一个宏的形式进行定义的

#define    lua_pop(L, n)     lua_settop(L, -(n) - 1);

比如弹出栈顶的元素则可以使用 lua_pop(L, 1)

Lua中C API栈操作的更多相关文章

  1. 基于nginx+lua+redis高性能api应用实践

    基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...

  2. Lua 中的string库(字符串函数库)总结

    (字符串函数库)总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-11-20我要评论 这篇文章主要介绍了Lua中的string库(字符串函数库)总结,本文讲解了string库 ...

  3. Lua中的一些库(1)

    [数学库] 数学库(math)由一组标准的数学函数构成.这里主要介绍几个常用的函数,其它的大家可以自行百度解决. 三角函数(sin,cos,tan……)所有的三角函数都使用弧度单位,可以用函数deg( ...

  4. Lua中的字符串函数库

    字符串库中的一些函数是非常简单的: string.len(s)          返回字符串s的长度:string.rep(s, n)      返回重复n次字符串s的串:你使用string.rep( ...

  5. 引用kernel32.dll中的API来进行串口通讯

    串口通讯可以引出kernel32.dll中的API来操作,相关源码如下:using System;using System.Runtime.InteropServices; namespace Tel ...

  6. lua中得栈

    如果你看了LUA的文档,那么就应该很清楚LUA与C交互数据时都是用到LUA中所谓的stack.那么当我调用lua_open函数之后栈是什么样的呢?空的(luaopen_base等会往栈上加进一些东西) ...

  7. c调用 lua 栈操作

    转自https://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html 打算记录一些lua_api, 可能会觉得lua文档中已经说的很清楚了, ...

  8. Lua的栈及基本栈操作

    Lua的栈及基本栈操作 https://blog.csdn.net/mydriverc2/article/details/51134737 https://blog.csdn.net/mydriver ...

  9. Lua和C++交互 学习记录之二:栈操作

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

随机推荐

  1. JavaScript基础9——操作DOM树

    appendChild()方法:添加子节点到末尾 类似于剪切粘贴的效果   insertBefore(newNode, oldNode)方法:在某个节点之前插入一个节点 newNode为要插入的节点, ...

  2. vue项目 PC端点击查看大图

    今天,发现了一款还不错的插件来实现查看大图,成熟度也比较高,支持各种操作 原作品的github地址为 https://github.com/mirari/v-viewer 也有对应的中文文档,使用方法 ...

  3. C# 给DataTable去重

    using System; using System.Data; namespace DelegateTest { public class Program { public static void ...

  4. Zabbix分布式监控系统实践

    https://www.zabbix.com/wiki/howto/install/Ubuntu/ubuntuinstall 环境介绍OS: Ubuntu 10.10 Server 64-bitSer ...

  5. JavaWeb(四):JDBC

    数据持久化(persistence) 把数据保存到可掉电式存储设备中以供之后使用. 大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各 ...

  6. 【leetcode】1026. Maximum Difference Between Node and Ancestor

    题目如下: Given the root of a binary tree, find the maximum value V for which there exists different nod ...

  7. js事件循环机制

    本文参考链接:https://www.jianshu.com/p/cf47bc0bf2ab 一.先搞懂两个东西:堆和栈 栈由操作系统自动分配释放,用于存放函数的参数值.局部变量等一些基本的数据类型,其 ...

  8. AI 一体机,满足新时代的新需求

    AI 变革带来哪些 IT 的新要求? 深度学习的突破和硬件的突飞猛进,使得人工智能“第n春”焕发蓬勃生机.这是历史上第一次,机器可以在如人脸识别等‘人类’工作上做得比我们人类更好. 人工神经网络有许多 ...

  9. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 I. Reversion Count (java大数)

    Description: There is a positive integer X, X's reversion count is Y. For example, X=123, Y=321; X=1 ...

  10. luogu P1307 数字反转 x

    题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2). 输入输出格式 输入格式: 输入 ...