Pointer Arithmetic

Kategori: C , 26 Haziran 2019 , JanFranco


Pointerlar üzerinden aritmetik işlemler yapabiliriz, toplama çıkarma gibi. Örneğin bir stringi gösteren bir pointerımız var. Bildiğimiz gibi pointer stringin ilk karakterini işaret eder. Biz pointer'ı bir arttırdığımızda, ikinci karaktere erişmiş oluruz. Karakterler çoğu sistemde 1 byte'lık yer kaplar. Peki elimizde integer sayılardan oluşan bir diziyi gösteren pointer olsaydı ve aynı işlemi orada yapsaydık ne olacaktı? İkinci integer sayıya erişecektik. Pointer'ı bir arttığımızda hangi veri tipini işaret ediyorsa, o kadar yer atlar. Biz yine pointer'ı bir artırırız ancak aslında 4 byte kadar gitmiş olur. Örnek görelim:

int main(){
    
    int a[4] = {50, 99, 3490, 0};
    
    int *p;
    p = a;
    
    while(*p > 0) {
        printf("%i\n", *p);
        p++;
    }
    
    return 0;
}
Burada a dizisinin son elemanı 0 olarak ayarlanmıştır ve while döngüsünün condition'ı buna göredir. Eğer 0. elemana gelirsek döngü sonlanacaktır. Bir başka örnek görelim:
int main(){
    
    char *source = "Copy me!";
    char dest[20];
    char *sp;
    char *dp;
    for(sp = source, dp = dest; *sp != '\0'; sp++, dp++) {
        *dp = *sp;
    }
    
    return 0;
}
Burada for döngüsündeki condition, sp pointer'ının '\0' ı göstermemesidir. Biiyoruz ki stringler '\0' ile biter. sp pointerı source dizisini, dp destination dizisini işaret etmekte. Her bir iteration'da sp ve dp pointerları bir artırılıyor. dp = sp diyerek source dizisini aynen dest dizisine kopyalıyoruz.


Sonraki Yazı: Command Line Arguements
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın