Pointer, String, dan Tipe C
Jembatani sistem tipe C dan Zig.
Pointer, String, dan Tipe C adalah pelajaran Zig 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 Zig Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Zig Academy mencakup 4 pelajaran total.
Tipe C Diterjemahkan
Saat Zig mengimpor C, setiap tipe C dipetakan ke tipe Zig. int menjadi c_int, sehingga lebarnya persis sesuai dengan ABI C.
const x: c_int = 10;Bilangan Bulat ABI C
Zig menyediakan nama yang sesuai dengan ABI seperti c_int, c_uint, c_long, dan c_char agar nilai Anda sesuai dengan yang diharapkan C.
Pointer C Menggunakan [*c]
Pointer C mentah menjadi tipe khusus [*c]T. Tipe ini dapat bernilai null dan dikonversi secara longgar, mencerminkan fleksibilitas pointer C.
var p: [*c]u8 = null;Mengapa [*c] Istimewa
Tipe [*c] menjembatani pointer C yang panjangnya bebas dan mungkin bernilai null. Jika memungkinkan, tipe ini dapat dikonversi ke dan dari slice serta pointer Zig.
String C Berupa Byte
String C hanyalah pointer ke byte yang diakhiri angka nol. Tidak ada panjang yang disimpan, hanya terminator null.
Literal yang Diakhiri Null
Tuliskan string bergaya C dengan bentuk sentinel. Tipe [*:0]const u8 menandai byte yang diakhiri angka 0.
const s: [*:0]const u8 = "hello";Meneruskan String ke C
Literal string Zig sudah diakhiri null, sehingga Anda dapat langsung memberikannya kepada fungsi C yang mengharapkan pointer char.
c.puts("done");Membaca Kembali String C
Untuk mengubah string C menjadi slice Zig, gunakan std.mem.span, yang berjalan hingga byte null untuk menemukan panjangnya.
const slice = std.mem.span(cstr);Pointer void
void* milik C muncul sebagai ?*anyopaque dalam Zig. Anda perlu meng-cast-nya kembali ke tipe pointer konkret sebelum menggunakannya.
Cast dengan @ptrCast
Menjembatani tipe pointer di seluruh batas C menggunakan @ptrCast, yang menafsirkan ulang pointer tanpa mengubah alamatnya.
const p: *Node = @ptrCast(@alignCast(raw));Sesuaikan, Jangan Menebak
Kebiasaan yang aman adalah menyesuaikan tipe C secara tepat: gunakan c_int untuk int dan span untuk string agar tidak ada kesalahan yang terjadi secara diam-diam.
Pemeriksaan Singkat
Ingat kembali cara Zig mengubah string C menjadi slice yang dapat digunakan.
Rangkuman
Anda telah mempelajari bahwa tipe C dipetakan ke nama ABI seperti c_int, pointer C menggunakan [*c], dan std.mem.span mengubah string C menjadi slice. 🎯
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pointer, String, dan Tipe C” gratis?
Ya — teks lengkap “Pointer, String, dan Tipe C” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Zig Academy, upgrade ke CoddyKit PRO. Kursus Zig Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pointer, String, dan Tipe C”?
Jembatani sistem tipe C dan Zig. Kamu berlatih Zig 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 Zig Academy?
Tidak diperlukan pengalaman sebelumnya. Zig 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, String, dan Tipe C” 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 Zig Academy ini?
Ya. Setiap pelajaran Zig 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
- Mengimpor Header C dengan @cImport
- Memanggil Fungsi C dan Menautkan
- Pointer, String, dan Tipe C
- zig translate-c untuk Membaca C sebagai Zig