Referans tabanlı gelişmiş diller var olmadan önce, bir veriye ulaşmak için pek güvenilir olmayan ancak doğru kontroller eşliğinde bir sistemi baştan aşağı yönetebilecek erişim yetkisine sahip olmamızı sağlayan yapı, “Pointer Aritmetiği”..
Pointer aritmetiğinin genel mantığına, bir aracı ya da container olmadan veriye işaretçilerle doğrudan ulaşmak da diyebiliriz.
İşaretçi Nedir ? (Pointer)
Değişkenlere ait adres değerlerini tutan değişkenlerdir. C ‘de tanımlanırken “*” ön ekini alırlar.
Hemen kısa bir kodla örnekleyelim…
int sayi = 100; // 100 sayisini bellege yazdik. Ve bu sayiya ulasmak icin de sayi degiskenini tanimladik. //Eger ki bu sayiyi yazdirmak istersek; printf("sayi: %d\n",sayi); //kodu ile oncelikle container degiskenimize baglanip daha sonra onun uzerinden degerimize ulasiriz. //Bir de pointer kullanarak gorelim. int *ptr_sayi; //Su an ptr_sayi degiskeninin, herhangi bir degiskenin adresini tutacagini derleyicimize belirttik. //Simdi bu pointer degiskenimize, tutacagi-gosterecegi adresi atayalim. //Not: C''de bir degiskenin adresine ulasmak icin degisken adina on ek olarak '&' karakteri kullanilir. ptr_sayi = &sayi; // Artik ptr_sayi pointerimiz, sayi degiskenimizin adresini gostermekte. //Yani biz bu sayiyi pointer araciligi ile gostermek istersek; printf("sayi: %d (Pointer ile…)\n",*ptr_sayi); //bu sekilde ayni sayi degerini ekrana yazdirabiliriz. //Not: Bir degiskene on ek olarak getirilen '*' karakteri, o degiskenin icerisinde tuttugu degeri adres baz alip, o adresin icinde bulunan degere ulasilmasini saglar.
Görüldüğü gibi C’de pointer işlemleri “*” ve “&” karakterleri üzerinden yürümektedir.
Not: Kullanıcıdan veri almak için kullanılan “scanf()” fonksiyonunda da alınan değerin atanacağı değişkene ön ek olarak “&” getirip, kullanıcıdan alınan değeri,bu değişkenin temsil ettiği adrese yazdığımızı hatırlayalım…
Şimdi işin içine bir de pointer karıştırdığımızda, neler olduğunu görelim…
Buraya kadar “*” ve “&” kullanımı ile ilgili aklımızda bir şeyler şekillendi ise, artık pointer aritmetiği örneklerine geçebiliriz…