Pointer ( gösterici )

Programlama dillerinin bazılarında olan bir hafıza alanını işaret etmeye yarayan değişken tipdir. Buna göre örneğin C dilinde tanımlanan bir değişken, yine aynı değişkeni gösteren bir pointer ile de erişilebilir hale gelmiş olur.

int *p;
*p=5;
printf(“%d %d %d “,p,*p,&p);

yukarıdaki C/C++ kodu çalıştırılacak olursa sırasıyla,
p’nin gösterdiği yerin adresini (5 değerinin hafızada saklandığı alan)
p’nin gösterdiği yerdeki değeri (5)
p’nin hafızadaki alanını
ekrana basar.

Bilindiği gibi C++ gibi melez (hem C hem de nesne yönelimli programlamayı destekler) diller dışında JAVA, C# gibi dillerde gösterici (pointer) bulunmaz. Bunun yerine nesne göstericisi (object referrer) bulunur. Bu değişken tipleri esas olarak bir sınıf(Class)‘dan türetilmiş bir nesneyi(object) gösterebilen değişkenlerdir. Bu değişkenlerin aslında birer göstericiden farkı yoktur.

Buna göre nesne yönelimli bir programlama dilinde aşağıdaki örnekte gösterildiği üzere bir gösterici kullanımı mümkündür:
class kutu{
int veri;
kutu next;
}
// görüldüğü üzere yukarıdaki kodda kendi tipinden bir objeyi gösteren (refer eden) bir gösterici kodlanmıştır.
class liste{
kutu head;
public void ekle(int deger){
head = new kutu();
head.veri = deger;
}
}
// yukarıdaki kodda yeni bir kutu oluşturulup değer olarak bu kutuya verilen parametre konulmuştur.

Örnek

Bir dizinin tersini alan kodu, gösterici matematiği (pointer arithmetic) kullanarak kodlayalım.

Amacımız verilen bir dizinin tersini almak. Dolayısıyla dizinin bir başını bir de sonunu gösteren iki gösterici kodlar ve bu göstericilerin içerisindeki değerlerin yerini değiştirerek ortaya doğru ilerletirsek amacımıza ulaşırız.

Örneğin dizimi 1,2,3,4,5 sayılarından oluşsun. Bu durumda göstericilerin ilk konumunda, birisi 1 diğeri de 5 değerini gösterecek. Gösterieilerden baştaki elemanı gösterene p, ve sondaki elemanı gösterene q dersek aşağıdaki şekilde sorunun çözümünü düşünebiliriz:

Yukarıdaki şekilde gösterildiği üzere iki uçtan birer gösterici (pointer) ile başlayarak her adımda bu göstericilerin içeriğini yer değiştiren (swap) ve göstericileri merkeze doğru hareket ettiren kod, aşağıdaki şekilde yazılabilir:

Kodun çıktısı aşağıda verilmiştir:

Yukarıdaki kodun 8. satırında bulunan döngü sadece 3 elaman için dönmektedir. Bunun sebebi dizinin ortasına kadar göstericilerin hareket ettirilmesidir. Ayrıca 9-11. satırlar arasında yer değiştirme işlemi (swap yapılmakta ve 12,13. satırlarda da göstericiler merkeze doğru hareket ettirilmektedir. Burada q göstericisinin sola , p göstericisinin ise sağa gitmesi için q’nun değeri azaltılırken, p’nin değeri arttırılmıştır.

Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


339 views

7 responses to “Pointer ( gösterici )”
  1. Fatih Kabakci says:

    int a[]={1,2,3,4,5};
    int *p=a;
    int *q=a+4;
    for(int i=0;i<3;i++){
    int temp=*p;
    *p=*q;
    *q=temp;
    q–;
    }
    for(int i=0;i<5;i++){
    printf("%d ",a[i]);
    }
    hocam bu kodun cıktısı 3 2 4 5 1 olarak veriyor.sizce dogrumu?dogruysa,ilk dongudeki i nin 0 dan 3 e kadar gitmesinin mantıgı nedir ?

  2. Şadi Evren ŞEKER says:

    Yukarıdaki kodunuzda, eksik ve hatalı satırlar var. Düzelterek yazının içerisine doğrusunu ekliyorum. Kodun yazılış amacı bir dizinin tersini gösterici matematiği (pointer arithmetic) ile alması.

  3. Fatih Kabakci says:

    Hocam cok tesekkur ederim hatayı simdi gordum kodda ki suphemi tescilledim.hayirli calimalar hocam saygilarimla..

  4. duygu says:

    int main(){
    int a[]={2,4,8,7,3};
    int *p=a;
    int*q=a+4;
    for(int i=0; i<3;i++){
    int temp=*p;
    *p=*q;
    *q=temp;
    p++;
    q–;
    }
    for(int i=0;i<5;i++){
    printf("%d",a[i]);
    getch();
    return 0;
    hocam hata veriyo bu kod yardımcı olursanız sevinirm

  5. Şadi Evren ŞEKER says:

    kodun çalışan hali yazının içinde bulunuyor.

    umarım yardımcı olur

    başarılar

  6. Anonymous says:

    bende öyle yaptım amahata verdi ne yapaccağımı bilmiyorum

  7. kodu test ettim ve çalışıyor. Muhtemelen birşeyleri kaçırıyoruz. Tam olarak hatanın ne olduğunu söylerseniz belki yardımcı olabilirim. Hata mesajını yazabilir misiniz?

Leave a Reply


8 + üç =

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Pointer ( gösterici )' isimli yazı 03 May 2007 tarihinde, saat: 02:41 'de �adi Evren �EKER tarafından gönderilmiş, toplam339 defa okunmuştur.

Benzer yazıları Bilgisayar Kavramları, C/C++, Programlama Dilleri kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Category: Bilgisayar Kavramları, C/C++, Programlama Dilleri