POINTER ' LARA GİRİŞ ( DERS 1 )

Bu başlık kilitlidir. Yeni mesajlar gönderilemez veya mevcut mesajlar düzenlenemez.
LmandrakeL
23-09-2004, 16:31   |  #1  
OP Üye
Teşekkür Sayısı: 0
78 mesaj
Kayıt Tarihi:Kayıt: Şub 2004

C dilinde POINTER kavramı yeni başlayanlar için tam bir kaos dur.Ancak Profesyonel programcılığa geçildiğinde vazgeçilmezler arasındadır.
Yeni başlayanlar "Yaw ne gerek war bu pointerlara ne güzel gidiyorduk işte oldumu şimdi " derler.Bu çok ama çok haklı ve doğal bir sorudur.Yani ya ne gerek var şimdi buna.Ne güzel değişkenlerimize değer veriyor,döngülerimizi kuruyoruz yani kullanmadan da çok şeyler yapabiliyoruz pointerlar olmadan.Aslında Şu an modern dillerin bazılarında pointerlar kullanılmaz.Java,C# gibi dillerde pointer kullanımı eğer istenirse dolaylı yollardan kullanılabilmektedir.Neyse konumuzun dışına çıkmayalım :D

Konuyu size çok açıklayıcı bir şekilde anlatmaya çalışacağım :D

Programlama dilinde kullanılan değişkenler bellek elemanları üzerinde saklanırlar.Döngüler ,geçici değişkenler stack segment denilen kısım üzerinde saklanırlar.

Yani siz =>

int a;

gibi bir tanım kullanırsanız bellekte 4 bayt lık (32bit sistemlerde) yer ayrılır.Yani kullandığınız derleyici size 4 baytlık bellek üzerinde yer açar.Niye açar çünkü a ya bir değer vereceksiniz ve verdiğiniz bu değerin herhalde bir yerlerde saklanması gerekir değilmi ? Buraya kadar her şey tamam.Şimdi a'ya 2 farklı yoldan değer verebiliriz.

birinci yol a=10 gibi bir değer vermedir.İkinci yol siz bu değeri(yani 10 sayısını ) a değişkeninin adresinin gösterdiği yere yazabilirsiniz.Yani a değişkeni bellekte bir yer işgal ediyor ve bu işgal ettiği yerin bir adresi var.Bu sizin evinizin kapı numarasına benzer.Ve bu evde siz kalıyorsunuz.İşte 10 değişkenide sizin eve ihtiyaç duymanız gibi bir adrese ihtiyaç duyar.Bu adres RAM üzerinde bir adrestir.Farzedelim a değişkeninin adresi ff32 olsun.Şimdi siz şöyle diyebilirsiniz

"Ey derleyici ff32 ye 10 değerini yaz onu ilerde kullanıcam lazım o bana " dersiniz ve derleyici sizin için oraya 10 değerini yazar.Sonra 10 değerini kullanmak için ya a değişkeninin ismini yada oranın adresini vererek 10 değerini ilerde kullanabilirsiniz.

İyi anladık a değişkenine 10 değerini a=10 diye atarız bunu biliyoruz ama adresini kullanarak nasıl atayacağız derseniz İŞTE BURADA POINTER denen bir şey kullanmamız gerekir.


BURAYA KADAR ANLATILANLAR ISINMA TURLARI İDİ ŞİMDİ KONUYA GEÇELİM


pointerları başında bir * (asteriks) karakteri ile tanımlarız.

int *ptr;

derleyici bu tanımlamayı görünce sizin bir pointer tanımladığınıza karar verecek ve buna adres atayıp ve bu atadığınız adresteki değerlerle işlem yapacağınızı anlayacaktır.Hımmmmmmmmm Şimdi biraz analiz yapalımmmmmmm......


" int *ptr " üç kısımdan oluşuyor.

- int
-  *
- ptr

şimdi bunları anlatalımmmmm.

int demekle adrese atayacağınız değişkenin türünü belirtiyoruz.
* demekle pointer tanımladığımızı belirtiyoruz.
ptr demekle bu adresin saklanacağı değeri belirtiyoruz...

bu pek açıklayıcı olmadıysa izlemeye devam edin ...

Şimdi en baştaki işlemimizi burada pointer kullanarak yapalımmmmm...


int * ptr ;
ptr=(int *)0Xff32;
*ptr=10;

Şimdi yukarıda ne yaptık bakalım

İlk önce bir pointer tanımladık. int * ptr;
daha sonra ptr ye ff32 değerini atadık.
daha sonra *ptr=10 demekle bu ff32 ye 10 değerini yazdık.


Şimdi dikkatle okuyun int * ptr gibi bir değişken tanımladığınızda


ptr ye adres atayacaksınız
*ptr ye o adrese atayacağınız değeri  vereceksiniz.(yani 10 değerini) tamammı ?


birinin başında yıldız * işareti var diğerinde yok yıldız işareti olmayana adresi , yıldız işareti olana ise o adrese yazacağınız  değeri yazacaksınız.

Yani başında yıldız olmayan eviniz kapı numarası başında yıldız olan o evde yaşayan siz olacaksınız.


POINTERLARIN en temel mantığı budur.Fazla uzatmak istemiyorum .Yeni başlayanların kafası ağrımış olabilir.Diğer 2 derste bunların Pratik kullanımlarını ve neden POINTER denen bu sinir bozucu şeyi kullanıdımızı anlatmaya çalışacağım... Nerelerde kullanılır,ne yapılır yenilirmi içilirmi anlatmaya çalışacağım...