偶然的你
首先我们要看一下我们要存储的对象存储对象是一个lua的table结构table结构在lua里可以看作是一种动态的数组然而在lua里的table和C里的数组差别比较大,我们并不能直接把表简单的传过去,所以我们要把table转化成一个c里可以存储的方式,因此我们需要遍历一下lua里的表下面是大概的思路 具体的代码你需要自己去写namelist = {} --这个用来存储遍历后展开的表的索引valuelist = {} --这个用来存储遍历后展开的每一个值typelist = {} --用来保存变量的类型function saveTable(t,parent)parent = parent or ""for i,v in pairs(t) dotable.insert(namelist,i.."#"..parent) --将名字存入名字列表table.insert(typelist,type(v)) --将对应变量的类型存入列表table.insert(valuelist,v) --将变量存入列表if type(v) == "table" thensaveTable(v,tostring(i).."#"..parent)endendend这里就可以将一个完整的表拆成索引 对应值 以及类型 存到3个表里然后将3个表 传给C,然后再由C把这个表重新组装起来测试的话 这样test = {1,2,3,4,{5,6,7},{{8},9}}saveTable(test)for i,v in pairs(namelist) doprint(v)endfor i,v in pairs(valuelist) doprint(v)endfor i,v in pairs(typelist) doprint(v)end就可以看到3个表的内部结构,然后C的话 只要通过类型判断处理方法,是表的话就再建个数组然后索引按照namelist里进行按层拆分就可以获得了