Pointer, Struct, dan Larik dalam FFI
Gunakan pointer C, tipe struct, dan alokasi larik dalam FFI.
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 50Pointer
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]) -- 99Definisi 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
endAritmetika 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]) -- 3ffi.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) -- 4294967295ffi.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 itPemeriksaan 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") endKinerja 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.
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
- Dasar-Dasar FFI: ffi.cdef dan ffi.load
- Memanggil Fungsi C melalui FFI
- Pointer, Struct, dan Larik dalam FFI
- Callback: Meneruskan Fungsi Lua ke C