POINTER
Pointer merupakan
sebuah variabel yang berisi alamat dari variabel lain. Suatu pointer
dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu
variabel dapat diketahui dengan mudah. Didalam mendeklarasikan suatu variabel harus pada lokasi yang pasti
didalam penggantian memori.Pada umumnya kita tidak dapat menentukan dimana
variabel akan ditempatkan Terkadang secara otomatis dilakukan oleh kompiler dan
sistem operasi yang sedang aktif, tetapi sesekali sistem operasi akan
memberikan banyak alamat yang kita tidak mengetahui dimana variabel
ditempatkan. Suatu pointer dapat dideklarasikan secara konstanta atau secara
tetap tidak dapat diubah. Untuk mendeklarasikan pointer secara konstanta dengan
memberikan kata const didepan nama konstanta. Ketika kita
memanggil fungsi dengan mengambil
argumen maka argumen disalin ke fungsi:
func zero(x int) {
x = 0
}
func main() {
x := 5
zero(x)
fmt.Println(x) // x is still 5
}
Dalam program ini fungsi nol tidak akan mengubah
x variabel asli
pada fungsi utama dan Salah satu
cara untuk melakukan hal ini
adalah dengan
menggunakan tipe data khusus yang dikenal sebagai pointer:
func zero(xPtr *int) {
*xPtr = 0
}
func main() {
x := 5
zero(&x)
fmt.Println(x) // x is 0
}
Di Go pointer diwakili
menggunakan * (tanda
bintang) karakter diikuti dengan jenis nilai yang disimpan. Dalam fungsi nol xPtr
adalah pointer ke
int. Juga digunakan untuk "dereference"
variabel pointer. Dereferencing pointer memberi
akses ke nilai pointer yang dituju. Ketika kita menulis * xPtr
= 0"
maka akan menyimpan int 0 di lokasi memori xPtr
". Jika kita mencoba xPtr = 0 sebaliknya kita
akan mendapatkan kesalahan kompilator
karena xPtr bukan
int (int*). Dengan demikian kita bisa
gunakan operator untuk menemukan alamat dari variable. &x mengembalikan int
(pointer ke int) karena int adal;ah int. dengan ini maka memungkinkan kita
untuk memodifikasi variable asli &x dan xPtr nol merujuk ke lokasi memori yang sama.
cara lain untuk mendapatkan pointer adalah dengan menggunakan fungsi baru built int
cara lain untuk mendapatkan pointer adalah dengan menggunakan fungsi baru built int
func one(xPtr *int) {
*xPtr = 1
}
func main() {
xPtr := new(int)
one(xPtr)
fmt.Println(*xPtr) // x is 1
}
Cara kerjanya adalah : New mengambil tipe sebagai argumen, mengalokasikan
memori yang cukup untuk menyesuaikan
nilai tipe itu dan mengembalikan pointer untuk itu. Pointer jarang digunakan
pada Go type
built-in. Dalam beberapa bahasa pemrograman ada perbedaan yang signifikan antara menggunakan new dan &, dengan hati-hati diperlukan untuk menghapus apapun yang dibuat dengan new.
Tidak ada komentar:
Posting Komentar