我是靠谱客的博主 等待向日葵,最近开发中收集的这篇文章主要介绍Lua程序设计(八十二)其他栈操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

其他栈操作

除了上述在 C 语言和栈之间交换数据的函数外,C API 还提供了下列用于通用栈操作的函数

int lua_gettop(lua_State *L);
void lua_settop(lua_State *L, int index);
void lua_pushvalue(lua_State *L, int index);
void lua_rotate(lua_State *L, int index, int n);
void lua_remove(lua_State *L, int index);
void lua_insert(lua_State *L, int index);
void lua_replace(lua_State *L, int index);
void lua_copy(lua_State *L, int fromidx, int toidx);

函数 lua_gettop 返回栈中元素的个数,也即栈顶元素的索引。函数 lua_settop 将栈顶设置为一个指定的值,即修改栈中的元素数量。如果之前的栈顶比新设置的更高,那么高出来的这些元素将会被抛弃; 反之,该函数会向栈中压入 nil 来补充大小。特别的,函数 lua_settop(L, 0) 用于清空栈。

函数 lua_pushvalue 用于将指定索引上的元素的副本压入栈。函数 lua_rotate将指定索引的元素向栈顶转动n个位置。若n为正数,表示将元素向栈顶方向转动,而n为负数则表示向相反的方向转动。

函数 lua_replace 弹出一个值,并将栈顶设置为指定索引上的值,而不移动元素。函数 lua_copy 将一个索引上的值复制到另一个索引上,并且原值不受影响。

#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"

static void stackDump(lua_State *L){
	
}

int main(void) {
	lua_State *L = luaL_newstate();
	
	lua_pushboolean(L, 1);
	lua_pushnumber(L, 10);
	lua_pushnil(L);
	lua_pushstring(L, "hello");
	
	stackDump(L);
	
	lua_pushvalue(L, -4); stackDump(L);
	lua_replace(L, 3); stackDump(L);
	lua_settop(L, 6); stackDump(L);
	lua_rotate(L, 3, 1); stackDump(L);
	lua_remove(L, -3); stackDump(L);
	lua_settop(L, -5); stackDump(L);
	
	lua_close(L);
	return 0;
}

最后

以上就是等待向日葵为你收集整理的Lua程序设计(八十二)其他栈操作的全部内容,希望文章能够帮你解决Lua程序设计(八十二)其他栈操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部