Senin, 15 Desember 2014

POINTER



 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


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