Süleyman KAYA tarafından yazılmıştır.
Merhaba, ben Süleyman Kaya. Bilgisayar bilimleri araştırmacısıyım. Bilgisayar bilimleri için C/C++ öğrenirken edindiğim bilgileri paylaşmak üzere bu yayın serisini sizlerle paylaşıyorum. Kaynak olarak Fahrettin Erdinç’in “Mühendislik Öğrencileri İçin Temel Klavuz: C++/C” kitabını kullanacağım. Bu yazımda C dilinde pointer’lardan bahsedeceğim.
Bir değişkenin bellek adresini tutan değişkene pointer denir. Özellikle donanım seviyesinde çalışmalar yapıyorsak, yani otomasyon ve robot yazılımları geliştiriyorsanız çok işinize yarayacaktır. Ayrıca dizilerde ve string işlemlerinde de çok kullanılır.
Pointer’lar, C dilini diğer dillerden ayıran en önemli konudur.
Pointer’ları anlayabilmek için RAM belleğin yapısını iyi bilmek gerekiyor. Daha önce de anlatıldığı gibi RAM bellek alt alta raflar şeklinde tasarlanmıştır ve her rafta bir değişken ya da veri saklanmaktadır. RAM bellekteki her rafın bir adresi vardır. Her veri belli bir adrese sahip rafa koyulur ve daha sonra gerektiğinde bu adresten/raftan alınır.
Bir pointer tanımlamak için değişkenin önüne (*) karakteri konulur ve aşağıdaki kalıp kullanılır:
Örnek:
Bir değişkenin adresini bir pointer’a atarsak pointer’ı kullanarak yaptığımız bütün işlem ve değişiklikler değişkenimizin sahip olduğu değeri etkiler.
Örnek olarak bir değişkenin RAM bellekteki adresini bir pointer’a atayalım:
Not: RAM bellek adresleri string bir değer olduğu için pointer’lar sadece char tipinde tanımlanabilirler.
Pointer’lar, matematiksel işlemlerde veya karşılaştırma işlemlerinde kullanılabilir. Pointer’ların değerini arttırıp azaltarak değişik işlemler yapılabilir.
Örneğin g pointer’ının değerinin I olduğunu düşünelim, bir sonraki bellekte de S değeri olsun, Eğer bellekte bir sonraki adrese gitmek istiyorsak g++; komutunu kullanabiliriz.
Eğer pointer’ın aritmetik özelliklerini kullanırsak dizi elemanları ile ilgili değişik işlemler yapabiliriz. Aşağıdaki tabloyu incelereseniz ne demek istediğimi daha iyi anlayacaksınız. Burada harfler adlı pointer &harfler[0] elemanının adresini barındırır. Tabloda listelenen diğer ifadeler de aynı değerleri taşır.
Yukarıdaki tabloya göre harfler değişkeni &harfler[0] elemanının adresini taşıyorsa *harfler pointer’ı harfler[0] elemanının değerini taşıyor demektir. Yani aşağıdaki gibi bir genelleme yapabiliriz:
Bir sonraki yayınımda C dilinde sayısal ve sözel fonksiyonlara değinmeyi planlıyorum. İyi günler dilerim.
[TR] C/C++ Öğreniyorum (#10)
Giriş
Merhaba, ben Süleyman Kaya. Bilgisayar bilimleri araştırmacısıyım. Bilgisayar bilimleri için C/C++ öğrenirken edindiğim bilgileri paylaşmak üzere bu yayın serisini sizlerle paylaşıyorum. Kaynak olarak Fahrettin Erdinç’in “Mühendislik Öğrencileri İçin Temel Klavuz: C++/C” kitabını kullanacağım. Bu yazımda C dilinde pointer’lardan bahsedeceğim.
Pointer (Gösterici) Nedir?
Bir değişkenin bellek adresini tutan değişkene pointer denir. Özellikle donanım seviyesinde çalışmalar yapıyorsak, yani otomasyon ve robot yazılımları geliştiriyorsanız çok işinize yarayacaktır. Ayrıca dizilerde ve string işlemlerinde de çok kullanılır.
Pointer’lar, C dilini diğer dillerden ayıran en önemli konudur.
Pointer’ları anlayabilmek için RAM belleğin yapısını iyi bilmek gerekiyor. Daha önce de anlatıldığı gibi RAM bellek alt alta raflar şeklinde tasarlanmıştır ve her rafta bir değişken ya da veri saklanmaktadır. RAM bellekteki her rafın bir adresi vardır. Her veri belli bir adrese sahip rafa koyulur ve daha sonra gerektiğinde bu adresten/raftan alınır.
Pointer Tanımlama
Bir pointer tanımlamak için değişkenin önüne (*) karakteri konulur ve aşağıdaki kalıp kullanılır:
veri_tipi *değiken_adı;
Örnek:
char *is;
Bir değişkenin adresini bir pointer’a atarsak pointer’ı kullanarak yaptığımız bütün işlem ve değişiklikler değişkenimizin sahip olduğu değeri etkiler.
Örnek olarak bir değişkenin RAM bellekteki adresini bir pointer’a atayalım:
char is[]= “is”;
char *is=&is; //artık is pointer’ında yaptığımız değişiklikler aynı ram bellek adersinde bulunduğu için is değişkenini de etkileyecektir.
Not: RAM bellek adresleri string bir değer olduğu için pointer’lar sadece char tipinde tanımlanabilirler.
Pointer Aritmetiği & Diziler
Pointer’lar, matematiksel işlemlerde veya karşılaştırma işlemlerinde kullanılabilir. Pointer’ların değerini arttırıp azaltarak değişik işlemler yapılabilir.
Örneğin g pointer’ının değerinin I olduğunu düşünelim, bir sonraki bellekte de S değeri olsun, Eğer bellekte bir sonraki adrese gitmek istiyorsak g++; komutunu kullanabiliriz.
char harf1[]= “I”
char *g=&harf1
printf(“%X”, g++); //çıktısı “S” olacaktır.
Dizilerle Çalışmak
Eğer pointer’ın aritmetik özelliklerini kullanırsak dizi elemanları ile ilgili değişik işlemler yapabiliriz. Aşağıdaki tabloyu incelereseniz ne demek istediğimi daha iyi anlayacaksınız. Burada harfler adlı pointer &harfler[0] elemanının adresini barındırır. Tabloda listelenen diğer ifadeler de aynı değerleri taşır.
Pointer — Dizi Elemanı
harfler — &harfler[0]
harfler+1 — &harfler[1]
harfler +2— &harfler[2]
harfler +3— &harfler[3]
harfler+4 — &harfler[4]
Yukarıdaki tabloya göre harfler değişkeni &harfler[0] elemanının adresini taşıyorsa *harfler pointer’ı harfler[0] elemanının değerini taşıyor demektir. Yani aşağıdaki gibi bir genelleme yapabiliriz:
*dizi_adi=dizi_elemani[0]
Kapanış
Bir sonraki yayınımda C dilinde sayısal ve sözel fonksiyonlara değinmeyi planlıyorum. İyi günler dilerim.
Moderatör tarafında düzenlendi: