Yaklaşık iki aydır C öğreniyorum ve pointer konusunda kafam takılı kaldı. Tanımları okudum, örnekleri yazdım, ama "neden" sorusu hâlâ net değil. Aşağıda anladığım kısımları ve takıldığım yerleri net bir şekilde paylaşıyorum, somut bir bağlamla yardım isteyebilmek için. Anladığım kısım: bir değişken, bellekte bir adreste oturuyor. Pointer da aslında o adresi içeren başka bir değişken. int x = 5; yazdığımda x değişkeninin bir adresi var, &x ile o adrese erişiyorum. int p = &x; yazdığımda p değişkenine x'in adresini atıyorum. p ile o adrese gidip oradaki değeri okuyorum. Takıldığım kısım 1: niye bu kadar dolaylı bir yapıya ihtiyaç var? Eğer x'in değerini değiştireceksem direkt x = 10 yazsam olmaz mı? Pointer'ın çözdüğü pratik sorun ne? Hocam fonksiyonlara değer geçişi dedi ama bu yine net anlatılamadı. Takıldığım kısım 2: pointer aritmetiği. p++ yaptığımda bellek adresi 1 mi artar yoksa sizeof(int) kadar mı? Eğer veri tipine bağlıysa, char ile int farkı çalışırken nasıl belirleniyor? Compiler bu farkı nereden biliyor? Takıldığım kısım 3: null pointer ve dangling pointer kavramları. Bir pointer'ı NULL'a atadıktan sonra ona dereference edersem segmentation fault alıyorum. Tamam, bunu görüyorum. Ama dangling pointer durumunda bazen "şanslıyım" çalışıyor, bazen crash oluyor. Bu non-deterministic davranış neden, undefined behavior tam olarak ne demek? Takıldığım kısım 4: pointer to pointer. int pp diye bir şey gördüm ama beynim donuyor. Üç katmanlı bir indirection ne işe yarar, gerçek hayatta hangi senaryoda kullanılır? Kafamı en çok kurcalayan: stack ve heap ayrımı. malloc ile heap'ten alıyorum, return ettiğimde local pointer ölüyor ama heap'teki adres yaşıyor. Bu "yaşıyor" ne demek tam olarak, kimin sahipliğinde, kim free etmeli? Net ve örnekli bir açıklama yapan olursa çok minnettar olurum. Özellikle pointer'ın hangi gerçek hayat problemini çözdüğünü görmek istiyorum, kavram zihnimde soyut takılıyor.