DERS5 - C/C++ Ders Anlatımı - İşaretçiler - Pointer in C

Etiketler: 

int, float, char, double tipindeki değişkenleri veri değerlerimizi tutmak için kullandığımızı biliyoruz.

Değişken tanımlama bizleri "bellek adresleri ile uğraşmaktan kurtarır" demiştim.

Fakat karmaşık programlar yazarken bazen bellek adreslerine de erişmek isteyebiliriz.

Standart değişkenlerimiz ile sadece değişkenlerin değerlerine erişebiliriz.

C programlama dilinde değişkenleri bellek adreslerine erişim pointers (işaretçiler) ile olur.

C dilinin değişken tanımlaması aşağıdaki gibidir.

float *sayi1;

 

Yukarıda kayan noktalı sayı tipinde ve sayi1 isminde bir pointer tanımlaması yaptık.Bu tanımlama ile değişkenimizin hem değerine hem de adresine ulaşabiliriz.

Tanımlama yapılırken kullanılan yıldız "*" işareti bu değişkenin bir pointer (işaretçi) olduğunu ve aynı zamanda bir bellek adresini de işaret ettiğini gösterir.

Bir pointer'ın adresine erişim pointer'in değişken ismi ile yapılır. (sadece değişken ismiyie, önündeki * işaretisiz). Örnegin;

#include <stdio.h>
void main(void)
{
float *sayi1,*sayi2;
*sayi1=18.0;
*sayi2=45.0;
printf("adres atamasindan once sayi1=%f sayi2=%f  \n",*sayi1,*sayi2);
sayi2=sayi1;
printf("adres atamasindan sonra sayi1=%f sayi2=%f \n",*sayi1,*sayi2);
*sayi1=*sayi1+50.0;
printf("sayi1'in degerine 50 eklendikten sonra sayi1=%f sayi2=%f ",*sayi1,*sayi2);
}

Ekran Çıktısı:

Yukarıda iki işaretçi tanımladık ve bu işaretçilere başlangıç değerlerini verdik.

ilk değerlerini ekrana yazdırdık.

Daha sonra sayi1'nin adresini sayi2'ye atadık. Bu sayi sayi2'nin artık sayi1'in bellek adresini işaret ettiği anlamına gelir. Bir işaretçinin değeri işaret ettiği bellekteki değerdir. Bu durumda sayi2 artık sayi1'in değerini alır. Çünkü aynı bellek adresini işaret eden 2 değişken de, o adresteki değere sahiptir. Adres atamasından sonra değerlerinin aynı olduğunu görüyoruz.

Daha sonra sayi1'in değerini 50.0 artırdık ve tekrar değerlerini ekrana yazdırdık.

sayi1 ile sayi2 nin değerlerinin aynı olduğuna dikkat ediniz. Çünkü iki pointer hala aynı bellek adresini işaret etmektedir.