DEV Community

Aydın Yakar
Aydın Yakar

Posted on

Golang 101: İşaretçiler (Pointers)

Değişkenler hafıza da (memory) "değişken adresi" ve "değeri" şeklinde tutulurlar. Bir değişkenin değerini değiştirmek istediğimizde hafıza da o değişkenin adresine gider ve değerini değiştiririz.

İşaretçiler ise hafızadaki değişkenin adresini almak veya bu adresteki değeri değiştirebilmemiz için kullanılmaktadır.

package main

import "fmt"

func main() {

    i := 1
    fmt.Println(i)

    islem(i)
    fmt.Println(i)

    islemptr(&i)
    fmt.Println(i)

    fmt.Println(&i)

}

func islem(deger int) {
    deger = 0
}

func islemptr(deger *int) {
    *deger = 0
}
Enter fullscreen mode Exit fullscreen mode
1
1
0
0xc000126000
Enter fullscreen mode Exit fullscreen mode

çalıştır!

Örnekte görüldüğü üzere i değişkenine değer atanıp ekrana yazdırılıyor.

func islem(deger int) {
    deger = 0
}
Enter fullscreen mode Exit fullscreen mode

Fonksiyonlar da girdi için kullanılan parametreler aslında girilen değerin hafıza da yeniden oluşturulmasını sağlar. Yani örnekte deger adında yeni bir değişken oluşturup buna fonksiyon içerisinde atama yapmaktadır. Bu durumda fonksiyon dışındaki i değişkenine bir etkisi olamamıştır.

func islemptr(deger *int) {
    *deger = 0
}
Enter fullscreen mode Exit fullscreen mode

Bu fonksiyonda ise int değer bulunduran hafıza adresi alacağını *int türü ile belirtiyoruz. Fonksiyonu çalıştırırken ise işaretçimiz (pointer) i değişkeninin adresini & sembolü ile fonksiyona giriyor. Ardından fonksiyon içerisinde * sembolü ile de ilgili adresin değerini değiştireceğimiz belirtilmiş oluyor.

Yani değişkenin adresini & sembolü ile, değişken adresindeki değerini * sembolü ile belirtiyoruz.

Discussion (0)