0Pricing
Lua Academy · Aula

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  50

Ponteiros

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])   -- 99

Definiçã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
end

Aritmé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])         -- 3

ffi.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)  -- 4294967295

ffi.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 it

Verificaçõ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") end

Desempenho 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

  1. Noções básicas de FFI: ffi.cdef e ffi.load
  2. Chamando funções C via FFI
  3. Ponteiros, estruturas e matrizes em FFI
  4. Retornos de chamada: passando funções Lua para C
← Voltar para Lua Academy