İçeriğe atla

İşaretçi (bilgisayar programlama)

Vikipedi, özgür ansiklopedi
(İşaretçiler sayfasından yönlendirildi)

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 sıralı 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[değiştir | kaynağı değiştir]