①陣列是key值從1開始並連續遞增的table。
②索引號是從1開始,不是從0開始。
lua還提供了一些只針對陣列進行操作的api,如下:
①lualib_api lua_integer (lual_len) (lua_state *l, int idx);
lual_len 使用於陣列,可得到陣列元素個數;
以數字形式返回給定索引處值的「長度」; 它等價於在 lua 中呼叫 '#' 的操作。(非陣列使用#將得不到正確的值)
②lua_api int (lua_rawgeti) (lua_state *l, int idx, lua_integer n);
lua_rawgeti 獲取索引號n的陣列值,返回的int值為值的型別。
這是一次直接訪問,不會觸發元方法,效率高。
③lua_api void (lua_rawseti) (lua_state *l, int idx, lua_integer n);
lua_rawseti 設定索引號n的陣列值。
這個函式會將值彈出棧。 賦值是直接的;即不會觸發元方法,效率高。
建立乙個array.lua,lua檔案會在c++載入
global_c_read_array =
if global_c_write_array then
for i = 1, #global_c_write_array do
print("v = ", global_c_write_array[i])
endend
建立乙個lua5.cpp
#include using namespace std;
extern "c"
static int get_array(lua_state *l)
else if (lua_isnumber(l, -1))
} else if (ret_type == lua_tstring)
lua_pop(l, 1);
} /* 返回返回值的個數 */
return 0;
}static int set_array(lua_state *l)
int main(int argc, char *ar**)
當讀取lua中陣列時,執行
//相當於lua_loadfile和lua_pcall,載入並執行lua檔案
lual_dofile(l, "array.lua");
get_array(l);
當寫入lua中陣列時,執行
set_array(l);
lual_dofile(l, "array.lua");
Lua和C 的互動
step1 搭建好vs和lua相互動的環境 2.有lua lib.lib這個檔案 3.開始配置 滑鼠放在工程名那 右鍵選屬性 位址就選上面有原始碼的檔案路徑。如上,把引用目錄點開進行編輯位址是選lib檔案的位址 如上,吧庫目錄點開進行編輯位址也是lib檔案的位址 step2 給這個工程新增標頭檔案 ...
Lua和C如何互動 一
要理解lua和c的互動,先要理解堆疊和全域性表兩個概念 lua和c c 語言互動的主要方法是乙個無處不在的虛擬棧,棧的特點是先進後出.lua的全域性表可以想象成乙個map雜湊表結構,比如lua有乙個變數 name hello world 全域性表中存放了name和hello world的對應關係,可...
C 與Lua互動(二)
c 與lua的之間函式的相互呼叫 1.c 調lua函式 c與lua的所有互動都是通過乙個棧來完成的。我對前面提到的虛擬機器l的理解是,它就是乙個棧 可能理解的不對 然後通過對這個棧的操作來實現資料的互動。呼叫函式跟訪問變數其實差不多,前面都是做一樣的事,只是呼叫函式時獲取的變數是函式名。然後將需要的...