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.
« Static Scoping ( Sabit Alanlı Değiþkenler ) | Linked List (Linkli Liste veya Bağlı Liste) »
Yorumlar
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ş, toplam 772 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.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
Atıf ile Çağırma (Call by Reference)
Dolaylı sıralama (Indirect Sort, Gayrimüstakim sıralama)
Pointer (Gösterici) ve Diziler (Arrays)
Birliktelik, Münasebet ve Oluşum (Association, Aggregation and Composition)
Linked List (Linkli Liste veya Bağlı Liste)
Visual Basic ile Gösterici (Pointer) Kullanımı
Tavşan Kaplumbağa Algoritması (Hare and Tortoise Algorithm)
referans ile çağırma (call by reference)
Brent Algoritması (Brent's Algorithm)
fonksiyon göstericileri (function pointer)
RC4 Şifrelemesi (RC4 Cipher, ARC4, ARCFOUR)
Bağlantılar
[...] etmesi (point) ile oluşan zincire verilen isimdir. Buna göre her düğümde kendi tipinden bir pointer olacak ve bu pointerlar ile düğümler birbirine aşağıdaki şekilde [...]
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 ?
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ı.
Hocam cok tesekkur ederim hatayı simdi gordum kodda ki suphemi tescilledim.hayirli calimalar hocam saygilarimla..
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
kodun çalışan hali yazının içinde bulunuyor.
umarım yardımcı olur
başarılar