Merhaba. Göstericiler (Pointers), bir değişken oluşturduğunuzda değişken tipine göre RAM’da bir alan ayrılır. Ayrılan alanın bir referans değeri vardır. Değişken çağırıldığında ilgili dataya ulaşmak için bu referans değeri kullanılır. Referans değerlerinin tutulduğu değişkenlere ise Gösterici (Pointers) denir. Göstericiler robot yazılımlarında ve otomasyon yazılımlarında sık olarak kullanılmaktadır.
Göstericiler C dilini değerli kıklan özelliklerden biridir. Donanım düzeyinde yazılımlar geliştirecekseniz göstericiler vazgeçilmezinizdir. Aynız zamanda karar yapıları kullanılabilmektedir. Elektronik Mühendisliğin vaz geçilmezidir. Bu sebepten Elektronik Mühendisliğinde C dili öğretilmektedir.
Oluşturduğumuz değişkenlerin referans değerlerini, değişkenlerin önüne & operatörü koyarak öğrenebiliriz. Tabi bu değeri ekrana yazarkende %X parametresi ile ilişkilendirmeliyiz. Aşağıda örnek bir kullanımın bulunmaktadır.
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char sayi=1; printf("Degisken referans id: %X",&sayi); //Ekran Çıktısı : Degisken referans id: 62FE1F getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
C Gösterici Tanımlama
Evet buraya kadar anlaşıldığını var sayıyorum ve devam ediyorum. Değerli arkadaşlar bizlerde gösterici tanımlayabiliyoruz. Tanımlamış olduğumuz göstericilerede oluşturduğumuz değişkenlerin referans değerlerini atayabiliyoruz. Şimdi de değikenlerin referans değerlerini tuttuğumuz bir gösterici tanımlayalım. Öncelikle bir gösterici tanımlayacaksak degiskentipi *degisken şeklinde tanımlamalıyız. Göstericileri diğer değişken tanımlamalarından ayıran özellik değişken isminin önüne * operatörünün geliyor olması.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char degisken='a'; char *gosterici=°isken; printf("Degisken degeri : %c\n",degisken); printf("Degisken referans id : %X\n",°isken); printf("Gosterici Degeri : %X\n",gosterici); /* Ekran Çıktısı : Degisken degeri : a Degisken referans id : 62FE17 Gosterici Degeri : 62FE17 */ getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Ram belleğin yapısı bir kitaplık gibi raf şeklindedir. Bir referans değeri örenğin 2. raf ise bir üst rafa erişmek için 2+1 işlemi yaparak üçüncü rafa erişim sağlamış oluruz. Yani belirlenmiş bir referans değeriyle ileri geri yaparak kitaplığı gezebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char degisken='a'; char *gosterici=°isken; printf("Ilk gösterici degeri : %X\n",gosterici); gosterici++; printf("Bir sonraki gosterici degeri : %X\n",gosterici); gosterici+=5; printf("Alti sonraki gosterici degeri : %X\n",gosterici); /* Ekran Çıktısı : Ilk g÷sterici degeri : 62FE17 Bir sonraki gosterici degeri : 62FE18 Alti sonraki gosterici degeri : 62FE1D */ getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Dizi değişkenler sıralı referans değeri alarak RAM’da oluşturulmaktadır. Öreneğin 5 degerli bir dizi değişken oluşturulduğunda RAM’da sıralı olarak raflara yerleşirler.
İlkrafın referans numarasını dizi değişekenin adından veya sıfınrıncı index’inden öğreniriz. Örenğin char degiken[5]
dizisinin ilk referans değerini °isken
veya °iken[0]
şeklinde alabiliriz ve göstericiği bir artırarak gezinebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char degisken[6]={'M','E','R','Y','E','M'}; char *gosterici=degisken; printf("Dizi ilk referans degeri : %X\n",degisken);//dizi ilk referans değeri printf("Dizi ilk referans degeri : %X\n",°isken[0]); //dizi ilk eleman referans değeri printf("----------------------------------\n");//Ayaraç Ekledik printf("degisken[0] degeri : %c referans degeri : %X\n",degisken[0],gosterici); //Dizi 0 index değeri ve referans numarsı gosterici++;//gostericiyi bir artırdık printf("degisken[1] degeri : %c referans degeri : %X\n",degisken[1],gosterici);//Dizi 1 index değeri ve referans numarsı gosterici+=2;//Gostericiyi iki daha artırdık. printf("degisken[3] degeri : %c referans degeri : %X\n",degisken[3],gosterici);//Dizi 3 index değeri ve referans numarsı /* Ekran Çıktısı : Dizi ilk referans degeri : 62FE10 Dizi ilk referans degeri : 62FE10 ---------------------------------- degisken[0] degeri : M referans degeri : 62FE10 degisken[1] degeri : E referans degeri : 62FE11 degisken[3] degeri : Y referans degeri : 62FE13 */ getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |
Şimdide dizi değişkeni döngüye sokarak referans numaraları ile ekrana sıralayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> // Ekran girdi ve çıktılarını sağlamak için fonksiyon kütüphanemizi çağırıyoruz int main(){//ana fonksiyonumuzu başlatıyoruz. char degisken[]={"MEHMET"}; int sayac,degiskenAdet=sizeof(degisken)/sizeof(char)-1;//Değişken sayısını alırken bir düşürüyoruz nedeni '\0' dizi değerin sonunda yeralan null değeri içindir for(sayac=0;sayac<degiskenAdet;sayac++){ printf("degisken[%d] : %c degiken[%d] referans degeri : %X\n",sayac,*(degisken+sayac),sayac,°isken[sayac]); } /* Ekran Çıktısı : degisken[0] : M degiken[0] referans degeri : 62FE10 degisken[1] : E degiken[1] referans degeri : 62FE11 degisken[2] : H degiken[2] referans degeri : 62FE12 degisken[3] : M degiken[3] referans degeri : 62FE13 degisken[4] : E degiken[4] referans degeri : 62FE14 degisken[5] : T degiken[5] referans degeri : 62FE15 */ getchar(); //Consolun kapanmasını engellemek için bir karatere basılmasını bekliyoruz. return 0; // programın sorusuz çalıştığını işletim sistemine bildiriyoruz. } |