Pointer - 24 : İşaretçilerin(pointer) Durumu

İşaretçiler C-C++ dilinde belleğe ulaşmak, belleği kullanmak, yönetmek amaçlarıyla kullanılır. Bir pointer bir değişkenin bellekte tutulduğu yeri işaret eder.

int var şeklinde bir değişken tanımladığımızda bu değişken bir değer tutarken
int *var şeklinde bir değişken tanımladığımızda bu değişken bir adres tutmaktadır.

int var; şeklinde tanımlanmış bir değişkenin adresi &var şeklinde ifade edilir.
int *var; şeklinde tanımlanmış bir adresin tuttuğu değer ise *var şeklinde ifade edilir.


pointers.c
#include <stdio.h>
int main(){
   int* adres;
   int val;
   val = 22;
   printf("val in adresi : %p\n", &val);
   printf("val in degeri : %d\n\n", val);
   adres=&val;
   printf("adres pointerinin adresi : %p\n", adres);
   printf("adres pointerinin icerigi : %d\n\n", *adres);
   val = 11;
   printf("adres pointerinin adresi : %p\n", adres);
   printf("adres pointerinin icerigi : %d\n\n", *adres);
   *adres=2;
   printf("val in adresi : %p\n", &val);
   printf("val in degeri : %d\n\n", val);
   return 0;
}

Bu kodu çalıştırdığımda ben şöyle bir sonuç alıyorum.

val in adresi : 0x7ffc60d219c4   val in degeri : 22

adres pointerinin adresi : 0x7ffc60d219c4
adres pointerinin icerigi : 22

adres pointerinin adresi : 0x7ffc60d219c4
adres pointerinin icerigi : 11

val in adresi : 0x7ffc60d219c4
val in degeri : 2

Bu kod derlendiğinizde siz de içerikleri aynı görseniz de adresleri büyük ihtimal farklı göreceksiniz. Çünkü bir değişken tanımladığınızda sistemde uygun bir yere atılır. Bu her çalıştırdığınızda farklı bir yer olabilir.

İlk tanımlamada val değişkeni 22 değerini alıyor. Daha sonra val değişkeninin adresi ve adres değişkeni birbirine eşitleniyor. Bu adım ile adres değişkeni 22 değerini tutan val değişkeninin bellekteki yerini göstermiş oluyor.

Bir sonraki adımda val değişkenin değerini değiştirdiğimizde bellekteki yer güncellenmiş oluyor ve dolayısıyla adres değişkeninin gösterdiği yer güncellenmiş olduğu için adres değişkenin içeriği değişmiş oluyor. En son adım da ise diğer yönden aynı şekilde güncelleme yapılıyor.

Yorumlar

Bu blogdaki popüler yayınlar

31 : Fonksiyonda Struct Kullanımı

Structure - 29 : Yapılar ile Öğrenci Bilgileri Tutma

23 : İki Karakter Dizisini Birleştirme