0Pricing
Go Academy · Pelajaran

Apa Itu Pointer?

Operator alamat, dereferensi, dan pointer nil

Apa Itu Pointer? adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 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 Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Alamat Memori

Setiap variabel berada di alamat memori. Penunjuk menyimpan alamat tersebut. Dalam Go, penunjuk memiliki tipe: *int menyimpan alamat sebuah int.

Operator Pengambil Alamat &

Gunakan & untuk mendapatkan alamat variabel:

package main
import "fmt"

func main() {
    x := 42
    p := &x
    fmt.Println(p)  // 0xc000... (address)
    fmt.Println(*p) // 42 (value at address)
}

Dereferensi *

Gunakan * untuk membaca atau menulis nilai pada alamat penunjuk:

package main
import "fmt"

func main() {
    n := 10
    p := &n
    *p = 99
    fmt.Println(n) // 99
}

Penunjuk nil

Nilai nol penunjuk adalah nil. Melakukan dereferensi pada penunjuk nil menyebabkan kepanikan:

package main
import "fmt"

func main() {
    var p *int
    fmt.Println(p)        // <nil>
    fmt.Println(p == nil) // true
    // *p = 1 — PANIC
}

Tipe Penunjuk

Setiap tipe penunjuk bergantung pada apa yang ditunjuknya:

package main
import "fmt"

func main() {
    i := 1
    s := "hello"
    pi := &i   // *int
    ps := &s   // *string
    fmt.Printf("%T %T\n", pi, ps) // *int *string
}

Pemeriksaan nil Sebelum Digunakan

Selalu periksa nil sebelum melakukan dereferensi terhadap penunjuk yang diterima dari luar kode Anda:

package main
import "fmt"

func printInt(p *int) {
    if p == nil {
        fmt.Println("nil pointer")
        return
    }
    fmt.Println(*p)
}

func main() {
    v := 7
    printInt(&v)
    printInt(nil)
}

Penunjuk ke Struktur

Mengakses anggota struktur melalui penunjuk menggunakan notasi titik yang sama—Go melakukan dereferensi secara otomatis:

package main
import "fmt"

type Point struct{ X, Y int }

func main() {
    p := &Point{1, 2}
    p.X = 10         // same as (*p).X = 10
    fmt.Println(*p)  // {10 2}
}

Perbandingan Penunjuk

Dua penunjuk sama jika menunjuk ke variabel yang sama, yaitu alamat yang sama, atau keduanya bernilai nil:

package main
import "fmt"

func main() {
    a := 1
    p1 := &a
    p2 := &a
    p3 := new(int)
    *p3 = 1
    fmt.Println(p1 == p2) // true  — same address
    fmt.Println(p1 == p3) // false — different address
}

Tumpukan dan Timbunan

Kompiler Go menentukan apakah suatu variabel berada di tumpukan atau timbunan melalui analisis pelolosan. Saat Anda mengambil alamat variabel lokal dan mengembalikannya, Go otomatis memindahkannya ke timbunan—Anda tidak perlu mengelolanya secara manual.

Kapan NOT Menggunakan Penunjuk

Tidak semua hal memerlukan penunjuk:

  • Tipe nilai kecil, seperti bilangan bulat, boolean, dan struktur kecil, lebih murah disalin daripada dilakukan dereferensi
  • Data tidak dapat diubah yang dibagikan antar-goroutine aman digunakan sebagai nilai
  • Gunakan penunjuk terutama untuk perubahan atau struktur besar

Pemeriksaan Singkat

Apa yang dikembalikan operator &?

Ringkasan: Penunjuk

Hal-hal penting:

  • &v mendapatkan alamat; *p melakukan dereferensi
  • Nilai nol adalah nil—selalu periksa sebelum melakukan dereferensi
  • Go melakukan dereferensi otomatis saat mengakses anggota struktur melalui penunjuk
  • Analisis pelolosan mengelola tumpukan dan timbunan secara otomatis

Latihan

Tulis fungsi swap(a, b *int) yang menukar nilai dua bilangan bulat menggunakan penunjuk. Panggil dari main dan cetak nilai sebelum serta sesudahnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Apa Itu Pointer?” gratis?

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

Apa yang akan aku pelajari di “Apa Itu Pointer?”?

Operator alamat, dereferensi, dan pointer nil Kamu berlatih Go 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 Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go 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 1 dari 4.

Berapa lama pelajaran “Apa Itu Pointer?” 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 Go Academy ini?

Ya. Setiap pelajaran Go 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. Apa Itu Pointer?
  2. Pointer dan Fungsi
  3. Receiver Pointer pada Metode
  4. new() dan Kapan Menggunakan Pointer
← Kembali ke Go Academy