Hoş geldiniz!

ForumExe'ye kayıt olarak, topluluğumuzun diğer üyeleriyle tartışabilir, paylaşımda bulunabilir ve özel mesajlaşabilirsiniz.

Hemen Kaydolun!

C++'da Pointer Kavramı

  • Konbuyu başlatan Konbuyu başlatan Method
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar : 0
  • Görüntüleme : 168

Method

Kullanıcı
Acemi üye 365-Gündür-Beraberiz! Çaylak Üye 5 Yıldır Beraberiz Bronz Üye 10 Yıldır Beraberiz Doğrulanmamış Hesap Silver Üye Gold Üye Platin Üye
20
EXE RANK
Katılım
5 May 2010
Mesajlar
30,181
Tepkime puanı
0
Puanları
0
Yaş
34
Feedback: 0 / 0 / 0


Bu yazıda eğer bilgisayar bölümünde değilseniz çoğunlukla okullarda göremeyeceğiniz ancak oldukça önem taşıyan bir konu olan pointerla aşınalık sağlayarak üzerinizdeki zor gibi görünen bu konudaki korkuyu atmaya çalışacağız.

Öncelikle, kısaca bahsetmek gerekirse bir integer değişkenin hafızada integer değeri tutması gibi, ya da bir double değişkenin ondalıklı sayılar tutması gibi pointer da adres değeri tutan değişkendir. Yani içinde tuttuğu adres başka bir değişkenin adresine point eder diyebiliriz.İsterseniz bir örnek üzerinde açıklayalım.

int *p;
int i;
int j=10;
komutu ile bir integer değişkenin adresini tutan p isimli bir pointer ve de i ve j isminde iki integer tanımlayıp dahası j’nin değerini tanımlanır tanımlanmaz 10’a eşitlemiş olduk.

Şimdi i=j; diyerek i’nin de 10 olmasını sağlayabildiğimiz gibi

p=&j; komutu ile p pointerının j değişkeninin adresini tutmasını sağlayabiliriz.

Ancak dikkat etmemiz gereken nasıl i=j; derken i’nin karşısına yine bir integer değer geliyorsa aynı şekilde adres tutan p pointerının karşısına da j’nin adresi olan &j’nin geliyor olması. Yani &j demek, j’nin memorydeki(hafızadaki) adresi demek oluyor. Bir de bunu tersi olan * işareti var ki *p de bize p pointerının gösterdiği adresin içeriğini veriyor.

Yani şu durumda cout<<*p; gibi bir satır ‘p pointerının gösterdiği adresin içinde ne varsa onu ekrana yaz’ demek olacağından 10 rak***** ekranda gösterecektir.

Diyebiliriz ki C++’da array(dizi) olarak bildiğiniz şey, aslında pointer yapısına sahip. Yani arrayin sıfırıncı elemanına point eden bir pointer var elimizde ve tüm diğer elemanlar da hafızada sıfırıncı elemanın yanına öylece dizilmiş haldeler. İşte array dediğimiz şey de bu yapıdan başka bir şey değil.

Örneğin;

int x[2][3];
komutu bize nasıl 2’ye 3 lük bir matris tanımlama imkanı veriyorsa ve onun (i,j)’inci elemanına x[2][3]; şeklinde ulaşıyorsak, bu aslında şunu yazmaktan farklı bir şey değil;

*(&x[0][0]+3i+j)
burada &x[0][0] bize (0,0)ıncı elemanın adresini veriyor.

Bunu sütun sayısı olan 3 ile çarpıp j ile topladığınızda da (i,j)nci elemana ulaşmış oluyorsunuz.

Ufak ve şirin bir kısaltma olarak C++’da &x[0][0] yerine x kullanabiliyoruz.

Yani demek oluyor ki;

*(x+3i+j) ibaresi de (i,j)nci elemanı ifade etmemizi sağlıyor.

Şu an x[j] gibi kolay bir ifadeyi pointerlar ile ifade edip niye kalabalık yaptığımıza bir anlam verememeniz doğal. Ancak emin olun ki bazı durumlarda arraylarle uğraşmaktansa direkt pointer aritmetiği kullanarak işimizi çok daha kolay halledebileceğimizi ilerde anlayacaksınız.

Pointerlarin kullanıldığı en rahat anlaşılır ve etkin yerlereden biri dinamik hafıza kontrolüdür (dynamic memory management). Bir dahaki sefere uygulamalı olarak pointerların bize nasıl program ortasında değişken oluşturma ve yine istediğimiz anda ortadan kaldırma imkanı verdiğinden bahsedeceğiz. Bu defa sadece bilmeyenlerin pointerları kabaca tanımalarını ve varsa korkuyu üzerlerinden atmalarını amaçladım.

user_offline.gif
[IMG]http://www.***********/images/buttons/quote.gif[/IMG]
 


 

 
Geri
Üst