Göstericilerde Matematiksel İşlemler

Göstericilerde Matematiksel İşlemler

     Göstericilerle yalnızca kısıtlı sayıda aritmetik işlem yapılabilir. Bir gösterici arttırılabilir (++) ya da azaltılabilir ( — ), bir tamsayı göstericiye eklenebilir (+ ya da += ), bir tamsayı göstericiden çıkartılabilir (- ya da – =) ya da bir gösterici diğerinden çıkarılabilir.

int x[2] dizi tanımlansın ilk eleman hafızası 2000 adresine atandığını varsayalım xPtr , x[0] atanmış olsun xPtr adresi 2000 olmuş oldu. Aşağıdaki resimde int 4 byte tipinde arttırmalarla adrese bit eklenerek diğer elemanlara erişilebilir.

xPtr=x;
xPtr=&x[0];

xPtr +=1;
ifadesi tamsayıların hafızada 4 byte olarak tutulduğu düşünülürse 2004 ( 2000+1*4 ) sonucunu oluşturacaktır. dizisinde, xPtr artık x[ 1 ]’yi gösterecektir.

Eğer xPtr, x[2]’ü gösteren 20008’ya arttırılmış olsaydı,
xPtr – =2;
xPtr’yi 2000’e (dizinin başlangıcı) x[0] geri döndürecekti. Eğer bir gösterici bir ile arttırılır ya da azaltılırsa arttırma ( ++ ) ve azaltma ( — ) operatörleri kullanılabilir.

Göstericilerin Birbirinden Çıkarılması

    Örneğin, eğer aPtr, 5000 konumunu ve a2Ptr, 5008 konumunu gösteriyorsa,

z = a2Ptr-aPtr;

ifadesi z’e, aPtr’den a2Ptr’ye kadar olan dizi elemanı sayısını  2 atar.

void tipte bir göstericinin gösterdiği nesneye erişilemez. Örneğin, derleyici 4-byte tamsayı kullanan bir makinede int tipinde bir göstericinin 4 byte’ı kullandığını bilir ancak void gösterici, bilinmeyen veri tipindeki bir hafıza konumunu gösterdiğinden, derleyici göstericinin gösterdiği byte sayısını kesin olarak bilemez.

Sizeof Komutu

      Dizi isimlerine uygulandığında sizeof operatörü, dizideki toplam byte sayısını tamsayı cinsinde geri döndürür.

  1. #include <stdio.h>
  2.  
  3. size_t buyukluguBul( float * );
  4.  
  5. int main( )
  6. {
  7. float dizi[ 20 ];
  8.  
  9. printf( "Dizinin byte uzunlugu: %d",sizeof( dizi));
  10. printf( "\nFonksiyondan gelen byte sayisi: %d\n",buyukluguBul( dizi ));
  11.  
  12. return 0;
  13. }
  14. size_t buyukluguBul( float *ptr )
  15. {
  16. return sizeof( ptr );
  17. }

float tipte değişkenler hafızada normalde 4 byte olarak tutulduklarından ve dizi1, 20 elemana sahip olacak biçimde bildirildiğinden dizi1 içinde 80 byte bulunmaktadır.

buyukluguBul fonksiyonunun size_t tipini döndürdüğüne dikkat ediniz. size_t tipi, C standardı tarafından sizeof operatörüyle döndürülen değerin unsigned ya da unsigned long tipinde gösterimi olarak tanımlanmıştır.

Kimler Neler Demiş?

  Abone ol  
Bildir