FFI'da İşaretçiler, Yapılar ve Diziler
FFI'da C işaretçileri, yapı türleri ve dizi ayırmalarıyla çalışın.
FFI'da İşaretçiler, Yapılar ve Diziler, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
FFI'de C Türleri
FFI, tüm standart C türlerini destekler: int, float, double, char, işaretçiler, diziler ve yapılar. Bunları ffi.cdef içinde bildirin.
C Dizileri Oluşturma
ffi.new("type[N]") ile bir C dizisi ayırın. Ögelere 0 tabanlı dizinlemeyle erişin (C kuralı).
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İşaretçiler
Bir değere işaretçi oluşturun veya işaretçi türleri ayırın. İşaretçinin gösterdiği değere erişmek için ptr[0] kullanın.
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]) -- 99Yapı Tanımlama ve Erişme
Bir yapıyı cdef içinde bildirin, ardından ffi.new ile örnekler oluşturup alanlara nokta gösterimiyle erişin.
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)Yapı Dizisi
Toplu veri işleme için yapı dizileri oluşturun; bu yöntem oyun motorlarında ve sayısal hesaplamalarda yaygındır.
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İşaretçi Aritmetiği
ptr + n ile bir işaretçiyi ilerletin. Bu işlem, baytlar değil n öge kadar ötelenmiş yeni bir işaretçi döndürür.
local arr = ffi.new("int[5]", {1,2,3,4,5})
local p = arr + 2 -- pointer to arr[2]
print(p[0]) -- 3ffi.cast: Tür Dönüştürme
ffi.cast(ctype, val), bir değeri başka bir C türü olarak yeniden yorumlar. Dikkatli kullanın; yanlış dönüştürmeler tanımsız davranışa yol açar.
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 ve ffi.alignof
ffi.sizeof("Vec3"), bir C türünün bayt cinsinden boyutunu döndürür. ffi.alignof ise hizalama gereksinimini döndürür.
ffi.gc: Sonlandırıcı Ekleme
ffi.gc(ptr, cleanup), bir C işaretçisine Lua işlevi ekler; işaretçi GC tarafından toplanınca bu işlev çağrılır ve C belleği için RAII sağlar.
local p = ffi.gc(ffi.C.malloc(1024), ffi.C.free)
-- p is automatically freed when GC collects itBoş İşaretçi Denetimleri
İşaretçileri nil ile karşılaştırın (FFI karşılaştırmalarında nil, C NULL işaretçisine eşittir).
local ptr = lib.allocate()
if ptr == nil then error("allocation failed") endC Dizilerinin Performansı
FFI üzerinden erişilen C dizileri, sayısal veriler için Lua tablolarından belirgin ölçüde daha hızlıdır; kutulama, karma araması veya tür denetimi yapılmaz.
FFI Dizileri Sorusu
FFI, C dizileri için hangi dizini kullanır?
Özet: FFI'de İşaretçiler, Yapılar ve Diziler
C dizilerini ffi.new("type[N]") ile oluşturun (0 tabanlı), yapı alanlarına nokta gösterimiyle erişin, türleri yeniden yorumlamak için ffi.cast ve C belleğini otomatik temizlemek için ffi.gc kullanın.
Sıkça Sorulan Sorular
“FFI'da İşaretçiler, Yapılar ve Diziler” dersi ücretsiz mi?
Evet — “FFI'da İşaretçiler, Yapılar ve Diziler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“FFI'da İşaretçiler, Yapılar ve Diziler” dersinde ne öğreneceğim?
FFI'da C işaretçileri, yapı türleri ve dizi ayırmalarıyla çalışın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“FFI'da İşaretçiler, Yapılar ve Diziler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- FFI Temelleri: ffi.cdef ve ffi.load
- FFI ile C İşlevlerini Çağırma
- FFI'da İşaretçiler, Yapılar ve Diziler
- Geri Çağırmalar: Lua İşlevlerini C'ye Geçirme