Ponteiros, estruturas e matrizes em FFI
Trabalhe com ponteiros C, tipos struct e alocações de matrizes em FFI.
Ponteiros, estruturas e matrizes em FFI é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Tipos C na FFI
A FFI aceita todos os tipos C padrão: int, float, double, char, ponteiros, matrizes e estruturas. Declare-os em ffi.cdef.
Criando matrizes C
Alocar uma matriz C com ffi.new("type[N]"). Acesse os elementos com indexação iniciada em 0 (a convenção de C).
local ffi = require("ffi")
local arr = ffi.new("int[5]", {10, 20, 30, 40, 50})
print(arr[0], arr[1], arr[4]) -- 10 20 50Ponteiros
Crie um ponteiro para um valor ou aloque tipos de ponteiro. Use ptr[0] para desreferenciá-lo.
local ffi = require("ffi")
local p = ffi.new("int[1]", 42) -- int* pointing to 42
print(p[0]) -- 42
p[0] = 99
print(p[0]) -- 99Definição e acesso a estruturas
Declare uma estrutura em cdef, crie instâncias com ffi.new e acesse os campos usando a notação com ponto.
ffi.cdef[[
typedef struct {
float x, y, z;
} Vec3;
]]
local v = ffi.new("Vec3", 1.0, 2.0, 3.0)
print(v.x, v.y, v.z)Matriz de estruturas
Crie matrizes de estruturas para processar grandes volumes de dados — algo comum em mecanismos de jogos e na computação numérica.
local particles = ffi.new("Vec3[1000]")
for i = 0, 999 do
particles[i].x = i * 0.1
particles[i].y = 0
particles[i].z = 0
endAritmética de ponteiros
Avance um ponteiro com ptr + n. Isso retorna um novo ponteiro deslocado em n elementos (não bytes).
local arr = ffi.new("int[5]", {1,2,3,4,5})
local p = arr + 2 -- pointer to arr[2]
print(p[0]) -- 3ffi.cast: conversão de tipos
ffi.cast(ctype, val) reinterpreta um valor como outro tipo C. Use com cuidado — conversões incorretas causam comportamento indefinido.
local ffi = require("ffi")
local i = ffi.cast("int32_t", -1)
print(i) -- -1
local u = ffi.cast("uint32_t", i)
print(u) -- 4294967295ffi.sizeof e ffi.alignof
ffi.sizeof("Vec3") retorna o tamanho em bytes de um tipo C. ffi.alignof retorna seu requisito de alinhamento.
ffi.gc: associando finalizadores
ffi.gc(ptr, cleanup) associa uma função Lua a um ponteiro C, para que ela seja chamada quando o ponteiro for coletado pelo GC — permitindo RAII para memória C.
local p = ffi.gc(ffi.C.malloc(1024), ffi.C.free)
-- p is automatically freed when GC collects itVerificações de ponteiro nulo
Compare ponteiros com nil (que equivale ao ponteiro C NULL nas comparações da FFI).
local ptr = lib.allocate()
if ptr == nil then error("allocation failed") endDesempenho das matrizes C
Matrizes C acessadas pela FFI são significativamente mais rápidas do que tabelas Lua para dados numéricos — não há boxing, buscas por hash nem verificações de tipo.
Pergunta sobre matrizes FFI
Qual índice a FFI usa para matrizes C?
Recapitulação: ponteiros, estruturas e matrizes na FFI
Crie matrizes C com ffi.new("type[N]") (indexadas a partir de 0), acesse campos de estruturas com a notação com ponto, use ffi.cast para reinterpretar tipos e ffi.gc para a limpeza automática da memória C.
Perguntas Frequentes
A aula “Ponteiros, estruturas e matrizes em FFI” é grátis?
Sim — o texto completo de “Ponteiros, estruturas e matrizes em FFI” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Ponteiros, estruturas e matrizes em FFI”?
Trabalhe com ponteiros C, tipos struct e alocações de matrizes em FFI. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Ponteiros, estruturas e matrizes em FFI”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Noções básicas de FFI: ffi.cdef e ffi.load
- Chamando funções C via FFI
- Ponteiros, estruturas e matrizes em FFI
- Retornos de chamada: passando funções Lua para C