CodeBlanks Logo Icon CodeBlanks

& ve * operatörleri

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ğer

Uygulama İ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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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 := &amp;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

Soru
sayi := 42
p := ____sayi
Cevap
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

Başlangıç bölümündeki tüm dersler