İşaretçi (bilgisayar programlama)

Programlama dillerinde işaretçi, bellek adresi tutmak için tasarlanmış bir türdür.

İşaretçiyi anlamada, bir benzetim olarak kitap ayracı örneği verilebilir. Ayraç bir kitap sayfasına yerleştirilir, burada sayfa numarası bir bellek adresi, ayraç ise bir işaretçidir. Sayfa içeriğine erişmek için doğrudan ayracın bulunduğu sayfa açılabilir.

Bir değişken tanımlandığında, bellekte ona bir yer ayrılır. İşaretçiler bu bellek alanının başlangıç adresini tutar. a tam sayı değişkeni tanımlandığında, atandığı adresin başlangıcından değişkenin türünün boyu kadar bellekte yer kaplar. Değişkene atanan değer, ayrılan bu bellek alanında tutulur.

Değişken adı  Bellek Alanı    Bellek Adresi   C kodu
             ---------------
             -             -                  int a = 5;
     a       -    5        -    
             -             -
             ---------------  0x0000ffff

İşaretçi türünde bir pIa (pointer to integer a, a'yı gösteren bir tamsayı işaretçisi) değişkeni tanımlanır ve a değişkeninin adresi atanırsa, pIa a'nın adresini değer olarak tutar:

Değişken adı   Bellek Alanı   Bellek Adresi   C kodu
             ---------------
             -             -                  int* pIa = &a;
   pIa       - 0x0000ffff  -
             -             -
             ---------------  0xfe371fde2

a değişkeninde yapılan her değişiklik, pIa işaretçi değişkenine görünür. İşaretçi kullanılarak a'nın değeri okunabilir veya değiştirilebilir.

Değişken adı  Bellek Alanı    Bellek Adresi   C kodu
             ---------------
             -             -                  *pIa = 23;
     a       -    23       -    
             -             -
             ---------------  0x0000ffff


Türünden bağımsız olarak bir işaretçi değişkeninin değeri her zaman bir sayıdır (bir bellek adresi). İşaretçinin türü, tutulan adresteki verinin nasıl yorumlanacağını belirtir. Buna göre int* türündeki pIa, tuttuğu adresteki veriyi int olarak yorumlayacaktır.

Bu durumun bir istisnası void* dır. void* türündeki bir değişken, bir adres tutar fakat bu adresteki veriyi yorumlamaz, kullanıcının istediği türde cast kullanması beklenir.

İşaretçiler, dinamik bellek tahsisi, özyinelemeli veri yapısı gerçeklenimi, büyük boydaki veriye hızlı erişim, hafızada ardışık (sequential) tutulan verilerin iterasyonu, nesne yaşam süresi işlemleri, donanım adresine erişim gibi pek çok yerde karşımıza çıkar.

Dış bağlantılar

  • PL/I List Processing Paper from the June, 1967 issue of CACM
  • cdecl.org A tool to convert pointer declarations to plain English
  • Over IQ.com A beginner level guide describing pointers in a plain English.
  • Pointers and Memory Introduction to pointers – Stanford Computer Science Education Library
  • Pointers in C programming 2019-06-09 tarihinde Wayback Machine sitesinde arşivlendi. A visual model for the beginners in C programming
  • 0pointer.de A terse list of minimum length source codes that dereference a null pointer in several different programming languages
  • "The C book" – containing pointer examples in ANSI C
  • Joint Technical Committee ISO/IEC JTC 1, Subcommittee SC 22, Working Group WG 14 (8 Eylül 2007). International Standard ISO/IEC 9899 (PDF). Committee Draft. KB1 bakım: Birden fazla ad: yazar listesi (link) .