Pointer Flashcards
Neden Pointer
Örneğin a = 2; diye bir atama yaptığımızda atama yaptığımız scope bunun yerini görür(adresler sayesinde). Ancak biz pointer ile bu yerin adresini ayrıca belirtirsek farklı fonksiyonlarda bu değere ulaşabiliriz.
Pointerlarda adres bölgeleri tutulur.
int*ptr ile tanımlanır daha sonra;
ptr =&a ile a nın adres bölgesi bu pointera tanımlanır.
Bu adresi bilen her fonksiyon programın her yerinden bu bilgiye ulaşabilir oluyor.
Çalışma mantığı
int tipinden bir değişken verdiğimde derleyici bana 4 bytelık bir yer ayırıyor. a nın başlangıç adresinin kendine atıyor ama benden saklıyor.
Daha sonra pointer oluştururken kendim 4 bytelık bir alan yaratıyorum. Bunu adres gösteren bir adres yaratmak için kullanıyorum.
Derleyici runtime da a yı gördüğü yerde o adrese gidiyor ve cout görürse 4 bytelık bir okuma ile cout değişkenine verip bu değeri yazdırıyor.
Pointer içeriğine ulaşma
Tanımladıktan sonra *ptr ile ptr nin içeriğindeki adres karşılığına ulaşabilirim.
Pointer aritmetiği
int = 4byte
double = 8byte yer tutar
Bu iki türden de pointer oluşturursak ve
ptr++ ile adresler arasında gezinir ve byte değerine göre arttırır ya da azaltır.
mesela int pointeri için ptr++ = adress değerini 4 (byte) arttırır