Pointer, Structs und Arrays im FFI
Arbeiten Sie im FFI mit C-Pointern, Struct-Typen und Array-Allokationen
Pointer, Structs und Arrays im FFI ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
C-Typen in der FFI
Die FFI unterstützt alle standardmäßigen C-Typen: int, float, double, char, Zeiger, Arrays und Structs. Deklarieren Sie sie in ffi.cdef.
C-Arrays erstellen
Reservieren Sie ein C-Array mit ffi.new("type[N]"). Greifen Sie mit einer bei 0 beginnenden Indizierung auf Elemente zu, entsprechend der C-Konvention.
local ffi = require("ffi")
local arr = ffi.new("int[5]", {10, 20, 30, 40, 50})
print(arr[0], arr[1], arr[4]) -- 10 20 50Zeiger
Erstellen Sie einen Zeiger auf einen Wert oder reservieren Sie Speicher für Zeigertypen. Verwenden Sie ptr[0], um die Dereferenzierung vorzunehmen.
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]) -- 99Structs definieren und darauf zugreifen
Deklarieren Sie ein Struct in cdef, erzeugen Sie anschließend Instanzen mit ffi.new und greifen Sie per Punktnotation auf die Felder zu.
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)Array aus Structs
Erstellen Sie für die Verarbeitung großer Datenmengen Arrays aus Structs – ein gängiges Muster in Game-Engines und der numerischen Datenverarbeitung.
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
endZeigerarithmetik
Bewegen Sie einen Zeiger mit ptr + n weiter. Dies gibt einen neuen Zeiger zurück, der um n Elemente versetzt ist, nicht um n 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: Typumwandlung
ffi.cast(ctype, val) interpretiert einen Wert als einen anderen C-Typ. Verwenden Sie dies mit Vorsicht – falsche Umwandlungen führen zu undefiniertem Verhalten.
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 und ffi.alignof
ffi.sizeof("Vec3") gibt die Größe eines C-Typs in Bytes zurück. ffi.alignof gibt seine erforderliche Ausrichtung zurück.
ffi.gc: Finalizer anhängen
ffi.gc(ptr, cleanup) hängt eine Lua-Funktion an einen C-Zeiger an, sodass sie aufgerufen wird, wenn der Zeiger von der GC erfasst wird – dadurch wird RAII für C-Speicher ermöglicht.
local p = ffi.gc(ffi.C.malloc(1024), ffi.C.free)
-- p is automatically freed when GC collects itPrüfungen auf Nullzeiger
Vergleichen Sie Zeiger mit nil, das bei FFI-Vergleichen dem C-NULL-Zeiger entspricht.
local ptr = lib.allocate()
if ptr == nil then error("allocation failed") endLeistung von C-Arrays
Über die FFI angesprochene C-Arrays sind bei numerischen Daten deutlich schneller als Lua-Tabellen – ohne Boxing, Hash-Suchen oder Typprüfungen.
Frage zu FFI-Arrays
Welchen Index verwendet die FFI für C-Arrays?
Rückblick: Zeiger, Structs und Arrays in der FFI
Erstellen Sie C-Arrays mit ffi.new("type[N]") (Indizierung ab 0), greifen Sie per Punktnotation auf Struct-Felder zu, verwenden Sie ffi.cast zur Neuinterpretation von Typen und ffi.gc zur automatischen Freigabe von C-Speicher.
Häufig gestellte Fragen
Ist die Lektion „Pointer, Structs und Arrays im FFI“ kostenlos?
Ja — der vollständige Text von „Pointer, Structs und Arrays im FFI“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Pointer, Structs und Arrays im FFI“?
Arbeiten Sie im FFI mit C-Pointern, Struct-Typen und Array-Allokationen Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Pointer, Structs und Arrays im FFI“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- FFI-Grundlagen: ffi.cdef und ffi.load
- C-Funktionen über FFI aufrufen
- Pointer, Structs und Arrays im FFI
- Callbacks: Lua-Funktionen an C übergeben