Menu
CoddyTech

Dasar-Dasar Pointer di Go

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 19 dari 107.

Pointer adalah variabel yang menyimpan alamat memori variabel lain. Alih-alih menyimpan nilai secara langsung, variabel ini menyimpan lokasi tempat nilai tersebut berada di memori. Pointer merupakan dasar Go dan penting untuk manipulasi data yang efisien.

Untuk membuat pointer, gunakan operator & untuk mendapatkan alamat variabel, dan operator * untuk mendeklarasikan tipe pointer atau mengakses nilai pada alamat tersebut.

x := 42
p := &x  // p menyimpan alamat memori x

fmt.Println(p)  // 0xc000018030 (alamat memori)
fmt.Println(*p) // 42 (nilai pada alamat tersebut)

Operator & berarti "alamat dari" dan mengembalikan pointer. Operator *, saat digunakan pada pointer, berarti "nilai pada" dan disebut dereferencing. Kamu juga dapat mengubah nilai asli melalui pointer.

x := 10
p := &x

*p = 25         // ubah nilai melalui pointer
fmt.Println(x)  // 25 (variabel asli berubah)

Tipe pointer ditulis sebagai *T, dengan T sebagai tipe yang ditunjuk. Pointer ke int memiliki tipe *int.

var p *int      // mendeklarasikan pointer ke int
x := 100
p = &x          // p sekarang menunjuk ke x

Nilai nol dari pointer adalah nil, artinya pointer tersebut tidak menunjuk ke apa pun. Mencoba melakukan dereferensi pada pointer nil menyebabkan panic saat runtime, jadi selalu pastikan pointer sudah diinisialisasi sebelum digunakan.

challenge icon

Tantangan

Mudah

Mari buat penukar nilai sederhana yang menunjukkan kemampuan pointer untuk mengubah variabel melalui alamat memorinya.

Kamu akan menyusun kodemu dalam dua file:

  • swap.go: Buat fungsi bernama SwapValues yang menerima dua pointer *int sebagai parameter. Fungsi ini harus menukar nilai yang ditunjuk oleh kedua pointer tersebut. Setelah fungsi dipanggil, setiap variabel harus menyimpan nilai awal variabel lainnya. Fungsi ini tidak mengembalikan apa pun, tetapi langsung mengubah nilai melalui pointer.
  • main.go: Baca dua bilangan bulat dari input, simpan dalam variabel, lalu gunakan fungsi SwapValues untuk menukar nilainya. Cetak kedua nilai sebelum dan sesudah penukaran untuk menunjukkan perubahannya.

Input berikut akan diberikan:

  • Baris 1: Bilangan bulat pertama
  • Baris 2: Bilangan bulat kedua

Format output:

Before: a=[first] b=[second]
After: a=[first] b=[second]

Misalnya, jika diberikan 10 dan 25, outputmu seharusnya:

Before: a=10 b=25
After: a=25 b=10

Ingat untuk menggunakan operator & saat meneruskan variabelmu ke fungsi, dan operator * di dalam fungsi untuk mengakses dan mengubah nilai sebenarnya.

Coba sendiri

package main

import "fmt"

func main() {
	// Baca dua bilangan bulat dari input
	var a, b int
	fmt.Scanln(&a)
	fmt.Scanln(&b)

	// Tampilkan nilai sebelum ditukar
	fmt.Printf("Before: a=%d b=%d\n", a, b)

	// TODO: Panggil fungsi SwapValues dengan pointer ke a dan b
	// Ingat, gunakan operator & untuk meneruskan alamat

	// Tampilkan nilai setelah ditukar
	fmt.Printf("After: a=%d b=%d\n", a, b)
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online