import{_ as e,c as t,o as a,a4 as n}from"./chunks/framework.Cy9JvDAg.js";const h=JSON.parse('{"title":"4.1 - 栈","description":"","frontmatter":{"title":"4.1 - 栈","footer":true,"lastUpdated":true,"outline":false},"headers":[],"relativePath":"4.1.md","filePath":"4.1.md"}'),o={name:"4.1.md"},_=n('<h2 id="_4-1-栈" tabindex="-1">4.1 - 栈 <a class="header-anchor" href="#_4-1-栈" aria-label="Permalink to &quot;4.1 - 栈&quot;">​</a></h2><p>Lua使用<em>虚拟栈</em>来与C代码相互传递值。栈中的每个元素都表示一个Lua值（<strong>nil</strong>、数字、字符串……等等）。API中的函数可以通过接收到的状态机参数来访问栈。</p><p>当Lua调用C代码时，所调用的函数会得到一个新的栈，其独立于之前的和仍在活跃的C函数的栈。这个堆栈最初包含C函数的所需参数，C函数可以在这里存储临时Lua值，并且必须将结果都压入栈中以返回给调用方（参见<a href="/lua5.4-manual-zh/4.6.html#lua_CFunction">lua_CFunction</a>）。</p><p>为了方便，API中的大多数查询操作都不必严格遵循的栈规则。相反，它们可以使用<em>索引</em>来访问栈中的任意元素：正数索引表示栈中的绝对位置，以栈底1开始增长；负数索引表示相对于栈顶的位置。具体来说，如果栈有n个元素，那么索引1表示其第一个元素（即这个元素是第一个被压入栈的）而索引n表示最后一个元素；索引-1也表示最后一个元素（即栈顶的元素）而索引-n则表示第一个元素。</p>',4),r=[_];function s(c,l,i,u,d,p){return a(),t("div",null,r)}const f=e(o,[["render",s]]);export{h as __pageData,f as default};
