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
}
1
1
0
0xc000126000
Örnekte görüldüğü üzere i
değişkenine değer atanıp ekrana yazdırılıyor.
func islem(deger int) {
deger = 0
}
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
}
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.
Top comments (0)