package main

import "fmt"

type Titik struct {
	X, Y int
}

func main() {
	x := 42
	p := &x // p bertipe *int, menyimpan alamat x

	fmt.Println("nilai x      :", x)
	fmt.Println("nilai *p     :", *p) // membaca nilai lewat pointer

	*p = 100 // menulis nilai lewat pointer
	fmt.Println("x setelahnya :", x)

	var q *int                              // deklarasi tanpa nilai awal
	fmt.Println("q == nil     :", q == nil) // zero value pointer adalah nil

	fmt.Println("p == &x      :", p == &x) // bukti p menunjuk x

	t := Titik{X: 3, Y: 4}
	pt := &t
	pt.X = 10 // gula sintaksis dari (*pt).X
	fmt.Println("t.X          :", t.X, "t.Y:", t.Y)
}
