Özet - Pointer
- Go kursu
- Başlangıç
- Ders 68/90
- 4 dk
& ve * ile bir sayaç artıran fonksiyon yazarsın.
Pointer özeti
&x adres alır, *p adresteki değeri okur/yazar, *T işaretçi türüdür, sıfır değeri nil'dir. İşaretçiler değiştirme ve büyük değerleri kopyalamadan paylaşma içindir; new(T) ya da &T{...} ile oluşturulur; nil kontrolü unutulmamalıdır. Go'da işaretçi aritmetiği yoktur ve yerel değişkenin adresini döndürmek güvenlidir.
Bağlı liste örneği
İşaretçilerin klasik kullanımı birbirine bağlı düğümlerdir:
type Dugum struct {
Deger int
Sonraki *Dugum
}
bas := &Dugum{1, &Dugum{2, &Dugum{3, nil}}}
for d := bas; d != nil; d = d.Sonraki {
fmt.Print(d.Deger, " ")
}
// 1 2 3Son düğümün Sonraki alanı nil'dir; döngü nil'e ulaşınca biter.
Uygulama Bağlı liste toplamı
Yukarıdaki Dugum türünü yaz. 1 → 2 → 3 → 4 listesini oluştur ve bir döngüyle değerlerin toplamını hesaplayıp yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
type Dugum struct {
Deger int
Sonraki *Dugum
}
func main() {
bas := &Dugum{1, &Dugum{2, &Dugum{3, &Dugum{4, nil}}}}
toplam := 0
for d := bas; d != nil; d = d.Sonraki {
toplam += d.Deger
}
fmt.Println(toplam)
}Beklenen çıktı
10
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir dilimi fonksiyona verip içinde <code>s[0] = 9</code> yaparsan çağırandaki dilim değişir mi?
- Evet; dilim alttaki diziyi paylaşır, işaretçi gerekmez Doğru cevap
- Hayır, kopya alınır
- Yalnızca *[]int ile
- Derlenmez
Açıklama: Dilim başlığı kopyalanır ama aynı diziyi gösterir; eleman değişikliği görünür. append ile uzunluk değişikliği ise görünmez.
2 Sonraki düğüm
for d := bas; d != nil; d = d.____ {
toplam += d.Deger
}
for d := bas; d != nil; d = d.Sonraki {
toplam += d.Deger
}
Açıklama: d = d.Sonraki bir sonraki düğüme geçer.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
&x |
Adres |
*p |
Değer |
new(T) |
Sıfır değerli ayırma |
nil |
Değer yok |