Таблица, которую вы передаете функции, будет в стеке функции. Вы можете проиндексировать его, используя lua_getfield
или lua_gettable
.
Обходя таблицу с помощью lua_next
, вы можете заполнить ваш массив на C, если вам нужно; хотя для массива достаточно итерации от 1 до #t
.
Пример кода утилиты (не проверено):
int* checkarray_double(lua_State *L, int narg, int *len_out) {
luaL_checktype(L, narg, LUA_TTABLE);
int len = lua_objlen(L, narg);
*len_out = len;
double *buff = (double*)malloc(len*sizeof(double));
for(int i = 0; i < len; i++) {
lua_pushinteger(L, i+1);
lua_gettable(L, -2);
if(lua_isnumber(L, -1)) {
buff[i] = lua_tonumber(L, -1);
} else {
lua_pushfstring(L,
strcat(
strcat(
"invalid entry #%d in array argument #%d (expected number, got ",
luaL_typename(L, -1)
),
")"
),
i, narg
);
lua_error(L);
}
lua_pop(L, 1);
}
return buff;
}