首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在迭代之前请求一个以c为单位的lua表大小

在迭代之前请求一个以c为单位的lua表大小
EN

Stack Overflow用户
提问于 2011-01-27 19:12:08
回答 3查看 5.9K关注 0票数 2

这应该很简单,而且很可能是这样,但在我的C代码中,在开始迭代之前,我想知道表的大小。我需要预先分配一些内存来存储来自该表的值。

我将这个表作为lua c函数中的一个参数。

代码语言:javascript
复制
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;
}

表大小?如何获得表的大小?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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中的第二段。

票数 4
EN

Stack Overflow用户

发布于 2011-01-27 19:41:51

假设您正在处理数组-具有整数键的表,没有孔(有些键是nil) -您可以使用lua_objlen方法。引用手册中的内容:

返回值在给定可接受索引处的“长度”:对于字符串,这是字符串长度;对于表,这是长度运算符(‘#’)的结果;

票数 6
EN

Stack Overflow用户

发布于 2011-01-27 19:39:33

我不知道这是否真的是一个好的编程实践,但我经常以结构的形式使用二维数组/表

其中一个字段用于指向数组的ptr (或指向指针数组的指针),另一个字段用于表示列数和行数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4815588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档