Kategori: C , 23 Haziran 2019 , JanFranco
Pointerların en çok fayda sağladığı kısma geldik. Normalde bir değişkeni fonksiyona gönderdiğimizde, o değişkenin bir kopyası oluşturulur ve tüm işlemler o değişken üzerinde yapılır. Pointerları kullanmadan bir örnek gösterelim:
void increment(int i){ i = i + 1; } int main(){ int i = 10; printf("i is %d\n", i); increment(i); printf("i is %d\n", i); return 0; }
Bu kodlar çalıştırıldığında ekrana 10, 10 basılır. Çünkü değeri 10 olan i değişkenini fonksiyona gönderdiğimizde, fonksiyonda local bir kopya oluşturulur ve kopyaya +1 işlemi uygulanır ve kopyanın değeri 11 olur. Ancak o bir kopyadır ve main fonksiyonundan return yapılmadan erişilemez. Peki burada pointerları kullanırsak ne olur?:
void increment(int *p){ *p = *p + 1; } int main(){ int i = 10; printf("i is %d\n", i); increment(&i); printf("i is %d\n", i); return 0; }
Burada ekrana 10, 11 basılır. Burada yapılan işlemi özetlemek gerekirse, bir i değişkeni oluşturduk integer tipinde ve değerini 10 olarak atadık. Daha sonra bu i değişkeninin adresini fonksiyona gönderdik. Fonksiyonun parametresi integer-pointer olarak oluşturulmuş. Biz adresi gönderdiğimizde p pointer'ı artık i'yi göstermiş oldu. *p = *p + 1 işlemini yaptığımızda aslında i'nin değerini 1 artırmış olduk.