& ve * operatörleri
- Go kursu
- Başlangıç
- Ders 64/90
- 4 dk
Adres alma (&) ve değer alma (*) operatörlerini öğrenirsin.
& ve * operatörleri
& bir değişkenin adresini alır; * ise iki anlamda kullanılır: tür yazımında "işaretçi" (*int), ifadede "adresteki değer" (*p, dereference).
ad := "Ada"
p := &ad // p türü: *string
fmt.Println(*p) // Ada
*p = "Can"
fmt.Println(ad) // Can%p biçimiyle adresin kendisi yazdırılabilir (ör. 0xc000014070); değeri her çalıştırmada değişir.
İşaretçi karşılaştırma
İki işaretçi == ile karşılaştırılırsa adresleri karşılaştırılır, değerleri değil. Değerleri karşılaştırmak için önce dereference edilir:
a, b := 5, 5
pa, pb := &a, &b
fmt.Println(pa == pb) // false: farklı değişkenler
fmt.Println(*pa == *pb) // true: aynı değerUygulama İki işaretçi
a := 1 tanımla. p := &a ve q := p al, *q = 7 yap. a değerini ve p == q sonucunu tek satırda yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func main() {
a := 1
p := &a
q := p
*q = 7
fmt.Println(a, p == q)
}Beklenen çıktı
7 true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>a := 1; p := &a; q := p; *q = 7</code> sonrasında <code>a</code> kaçtır?
- 7 Doğru cevap
- 1
- 0
- Hata
Açıklama: q := p adresi kopyalar; p ve q aynı a'yı gösterir. *q = 7 a'yı değiştirir.
2 Adres al
sayi := 42
p := ____sayi
sayi := 42
p := &sayi
Açıklama: & operatörü değişkenin adresini verir.
3 Kod ve sonuç (a, b := 5, 5)
| Kavram | Anlamı |
|---|---|
&a == &a |
true |
&a == &b |
false |
*(&a) |
5 |
p := &a; *p = 9 |
a = 9 |