S.A
C programlama dilinde en onemli konulardan birisi olan ’pointer’ hakkında bir yazı hazırladım.
Umarım faydalı olur.
POINTERS
C ’de oluşturduğumuz her tip hafızada belirli byte boyutunda yer kaplar.
32 bit işlemcili bilgisayarlarda;
char – 1 byte
int – 4 byte
float – 4 byte
double – 8 byte
boyutlarında yer kaplar. 64 bit sistemlerde ise, değerler iki katı olarak değişir. Pointerlar ise - tipe bakmaksızın – her zaman 32 bit sistemlerde 4 byte, 64 bit sistemlerde 8 byte yer kaplarlar.
Orneğin; aşağıdaki kodun cıktısı yan taraftaki gibidir.
img src=http://img27.**************/img27/3262/98511152.jpg">
POINTER NE İŞE YARAR ?
Pointer, hafızada herhangi bir adresi gosteren değişkenlerdir. İstediğimiz bir adrese gitmek veya bilinen bir adres uzerinde işlem yapmak ( ilerlemek, geri gitmek, adresi yazdırmak vb. ) icin kullanılırlar. Butun tiplerde hatta void tipte bile pointer oluşturulabiliriz. Bunun icin oluşturacağımız değişkenin başına asteriks (*) koymamız yeterlidir.
Orneğin; integer turunde adı aPtr olan bir pointer oluşturmak istersek;
int *aPtr;
yazmamız yeterli olacaktır.
POINTER İŞLEMLERİ
int x;
int *xPtr;
olarak bir tanesi integer tipinde değişken, diğeri aynı tipte bir pointer oluşturduk.
xPtr = &x kodu;
x değişkeninin adresini xPtr pointerına atar. Artık hafızadaki x değişkeninin adresini biliyoruz.
İster &x yazdıralım ister xPtr yazdıralım, her ikisi de aynı sonucu verecektir.
img src=http://img4.**************/img4/7304/58808389.jpg">
Peki x değişkeninin sahip olduğu değere nasıl ulaşabiliriz ?
img src=http://img267.**************/img267/7172/76704056.jpg">
kodu x’in değerini direkt ve pointer vasıtası ile ulaşabildiğimizi gosterir.
Call by Value ve Call by Reference
Call by value ve Call by reference C programlama dilinde fonksiyonlara parametre yollama bicimleridir. Call by value, fonksiyona kopya değer yollamak, Call by reference fonksiyona gercek değer yollamak demektir.
Call by value, şeklinde yollanan parametreler fonksiyondan cıktıktan sonra dahi orjinal değerlerini korurlar.
Orneğin;
img src=http://img517.**************/img517/2517/18330337.jpg">
Gorulduğu gibi fonksiyona yolladığımız x değerini fonksiyonda kendisi ile carparak yine kendisine atadık. Normalde bu işlemi mainde yaparsak x değişkeninin son değerinin 25 olması lazım fakat hala son değer 5. Bunun nedeni C ’de otomatik fonksiyona yollanan değerin Call by value olarak gitmesidir.
Peki Call by reference nasıl yapılır ?
Reference olarak yollamak icin oluşturduğumuz değişkenin şu şekilde olması gerekir.
Orneğin;
int &x;
C dilinde boyle bir tanımlama olmadığı icin tam olarak reference olayı vardır diyemeyiz. Bunun yerine ’ simulated call by refence ’ vardır. Bir yukarıdaki ornekte x değerini kendisi ile carparak yine x’e atadık fakat x’in son değerinin yine değişmediğini gorduk. Şimdi yapacağımız ornekte x’in değerinin değiştiğini goreceğiz.
img src=http://img440.**************/img440/2152/56321218.jpg">
POINTER ARİTMETİĞİ
Pointer aritmetiği dediğimiz şey hafızadaki adresler uzerinde yurume işlemleridir.
Orneğin;
char *word = “Frm-Tr-CW”
şeklinde bir char pointerı oluşturduk. Printf icerisinde sadece word yazarsak tum stringi yazar.
img src=http://img18.**************/img18/7011/16101916.jpg">
Eğer elemanları tek tek yazmak istersek pointer aritmetiği kullabiliriz. Mesela ekrana Cyber Warrior yazdıralım ve ’ - ’ gorunce bunun yerine boşluk yazsın. Bunun icin karakterler uzerinde teker teker yurumemiz gerecek.
img src=http://img517.**************/img517/8269/26639866.jpg">]
“inrease address” yorumlu satırda adres uzerinde birer birer yurunmuştur. Aynı şekilde ’--’ operatoru ile geriyede gidebiliriz. Hafızadan alınan bolge pointerı alakadar etmez, ne kadar alındığı ile ilgilenmez. Bu nedenle hafızada istediğiniz kadar yuruyebilir istediğiniz adrese gidebilirsiniz. Bir pointer yardımı ile hafızayı alt ust edebilirsiniz. (:
Eğer talep cok olursa pointer fonksiyonlar, casting ve void pointer, array pointer ilişkisi hakkında da bilgi paylaşabilirim.
Herkese iyi calışmalar, kolay gelsin.
__________________
C Pointers
Android & IOS Uygulama Geliştirme0 Mesaj
●31 Görüntüleme