11.3 Gösterici Aritmetiği
11.3 Gösterici Aritmetiği
Göstericiler kullanılırken, bazen göstericinin gösterdiği adres taban alınıp, o adresten önceki veya sonraki adreslere erişilmesi istenebilir. Bu durum, göstericiler üzerinde, aritmetik işlemcilerin kullanılmasını gerektirir. Göstericiler üzerinde yalnızca toplama (+), çıkarma (-), bir arttırma (++) ve bir eksiltme (--) operatörleri işlemleri yapılabilir.
Aşağıdaki gibi üç tane gösterici bildirilmiş olsun:
1 2 3 |
char *kar; int *tam; double *ger; |
Bu göstericiler sırasıyla, bir karakter, bir tamsayı ve bir gerçel sayının bellekte saklanacağı adreslerini tutar. Herhangi bir anda, tuttukları adresler de sırasıyla 10000 (0x2710), 20000 (0x4e20) ve 30000 (0x7530) olsun. Buna göre aşağıdaki atama işelemlerinin sonucu:
1 2 3 |
kar++; tam++; ger++; |
sırasyla 10001 (0x2711), 20004 (0x4e24) ve 30008 (0x7538) olur. Bir göstericiye ekleme yapıldığında, o anda tuttuğu adres ile eklenen sayı doğrudan toplanmaz. Böyle olsaydı, bu atamaların sonuçları sırasıyla 10001, 20001 ve 30001 olurdu. Gerçekte, göstericiye bir eklemek, göstericinin gösterdiği yerdeki veriden hemen sonraki verinin adresini hesaplamaktır.
Genel olarak, bir göstericiye n sayısını eklemek (veya çıkarmak), bekllekte gösterdiği veriden sonra (veya önce) gelen n. elemanın adresini hesaplamaktır. Buna göre aşağıdaki atamalar şöyle yorumlanır.
1 2 3 |
kar++; /* kar = kar + sizeof(char) */ tam = tam + 5; /* tam = tam + 5*sizeof(int) */ ger = ger - 3; /* ger = ger - 3*sizeof(double) */ |
Program 11.3, bu bölümde anlatlanları özetlemektedir. İnceleyiniz.
Program 11.3: Gösterici aritmetiği
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* 10prg03.c: gösterici aritmetiği */ #include <stdio.h> int main() { char *pk, k = 'a'; int *pt, t = 22; double *pg, g = 5.5; pk = &k; pt = &t; pg = &g; printf("Onceki adresler: pk= %p pt= %p pg= %p \n", pk, pt, pg); pk++; pt--; pg = pg + 10; printf("Sonraki adresler: pk= %p pt= %p pg= %p \n", pk, pt, pg); return 0; } |
1 2 |
Onceki adresler: pk= 0xbfbbe88f pt= 0xbfbbe888 pg= 0xbfbbe880 Sonraki adresler: pk= 0xbfbbe890 pt= 0xbfbbe884 pg= 0xbfbbe8d0 |
hocam sitenizi yeni keşfettim gerçekten çok yararlı şeyler buldum ellerinize sağlık teşekkürler
Teşekkürler. Yardımcı olabildiysem ne mutlu bana.