这应该很简单,而且很可能是这样,但在我的C代码中,在开始迭代之前,我想知道表的大小。我需要预先分配一些内存来存储来自该表的值。
我将这个表作为lua c函数中的一个参数。
static int lua_FloatArray(lua_State *L)
{
int n = lua_gettop(L);
if (n != 1 || lua_gettype(L, 1) != LUA_TTABLE)
{
luaL_error(L, "FloatArray expects first parameter to be a table");
return 0;
}
int tablesize = ????;
float *a = (float*)lua_newuserdata(L, tablesize * sizeof(float));
lua_pushnil(L);
int x = 0;
while (lua_next(L, index) != 0)
{
a[x++] = (float)lua_tonumber(L, -1);
lua_pop(L, 1); // Remove value, but keep key for next iteration
}
return 1;
}表大小?如何获得表的大小?
发布于 2011-01-27 19:24:52
没有这样的API函数。你需要自己数一数。另一方面,您似乎正在用C语言填充一个数组,我猜您有一个类似于{10,20,30}的Lua表,并且您假设您将按照我列出的顺序获得这些项。但lua_next并非如此。请参阅http://www.lua.org/manual/5.1/manual.html#pdf-next中的第二段。
发布于 2011-01-27 19:41:51
假设您正在处理数组-具有整数键的表,没有孔(有些键是nil) -您可以使用lua_objlen方法。引用手册中的内容:
返回值在给定可接受索引处的“长度”:对于字符串,这是字符串长度;对于表,这是长度运算符(‘#’)的结果;
发布于 2011-01-27 19:39:33
我不知道这是否真的是一个好的编程实践,但我经常以结构的形式使用二维数组/表
其中一个字段用于指向数组的ptr (或指向指针数组的指针),另一个字段用于表示列数和行数。
https://stackoverflow.com/questions/4815588
复制相似问题