0Pricing
Lua Academy · Ders

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

Yapı 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])         -- 3

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

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

Boş İş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") end

C 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

  1. FFI Temelleri: ffi.cdef ve ffi.load
  2. FFI ile C İşlevlerini Çağırma
  3. FFI'da İşaretçiler, Yapılar ve Diziler
  4. Geri Çağırmalar: Lua İşlevlerini C'ye Geçirme
← Lua Academy Sayfasına Dön