Lua Academy · Pelajaran

Pointer, Struct, dan Larik dalam FFI

Gunakan pointer C, tipe struct, dan alokasi larik dalam FFI.

Pelajaran 3 dari 413 langkah

Pointer, Struct, dan Larik dalam FFI adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Tipe C dalam FFI

FFI mendukung semua tipe C standar: int, float, double, char, pointer, array, dan struct. Deklarasikan tipe tersebut dalam ffi.cdef.

Membuat Array C

Alokasikan array C dengan ffi.new("type[N]"). Akses elemennya menggunakan indeks berbasis 0 (konvensi 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

Pointer

Buat pointer ke suatu nilai atau alokasikan tipe pointer. Gunakan ptr[0] untuk melakukan dereferensi.

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

Definisi dan Akses Struct

Deklarasikan struct dalam cdef, lalu buat instans dengan ffi.new dan akses bidangnya menggunakan notasi titik.

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 Struct

Buat array struct untuk pemrosesan data dalam jumlah besar—umum digunakan dalam mesin permainan dan komputasi numerik.

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

Aritmetika Pointer

Majukan pointer dengan ptr + n. Ini mengembalikan pointer baru yang bergeser sebanyak n elemen, bukan byte.

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: Pengecoran Tipe

ffi.cast(ctype, val) menafsirkan kembali suatu nilai sebagai tipe C lain. Gunakan dengan hati-hati—cast yang salah menyebabkan perilaku tidak terdefinisi.

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 dan ffi.alignof

ffi.sizeof("Vec3") mengembalikan ukuran byte suatu tipe C. ffi.alignof mengembalikan persyaratan alignment-nya.

ffi.gc: Melampirkan Finalizer

ffi.gc(ptr, cleanup) melampirkan fungsi Lua ke pointer C sehingga fungsi tersebut dipanggil ketika pointer menjalani GC—memungkinkan RAII untuk memori C.

local p = ffi.gc(ffi.C.malloc(1024), ffi.C.free)
-- p is automatically freed when GC collects it

Pemeriksaan Pointer Null

Bandingkan pointer dengan nil (yang setara dengan pointer NULL C dalam perbandingan FFI).

local ptr = lib.allocate()
if ptr == nil then error("allocation failed") end

Kinerja Array C

Array C yang diakses melalui FFI secara signifikan lebih cepat daripada tabel Lua untuk data numerik—tanpa boxing, pencarian hash, atau pemeriksaan tipe.

Pertanyaan tentang Array FFI

Indeks apa yang digunakan FFI untuk array C?

Ringkasan: Pointer, Struct, dan Array dalam FFI

Buat array C dengan ffi.new("type[N]") (berindeks mulai dari 0), akses bidang struct dengan notasi titik, gunakan ffi.cast untuk menafsirkan ulang tipe, dan gunakan ffi.gc untuk pembersihan memori C secara otomatis.

Gratis untuk memulai

Belajar Lua dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
40
Pelajaran
159

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pointer, Struct, dan Larik dalam FFI” gratis?

Ya — teks lengkap “Pointer, Struct, dan Larik dalam FFI” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pointer, Struct, dan Larik dalam FFI”?

Gunakan pointer C, tipe struct, dan alokasi larik dalam FFI. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Pointer, Struct, dan Larik dalam FFI” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar FFI: ffi.cdef dan ffi.load
  2. Memanggil Fungsi C melalui FFI
  3. Pointer, Struct, dan Larik dalam FFI
  4. Callback: Meneruskan Fungsi Lua ke C
← Kembali ke Lua Academy