C/C++ Öğreniyorum (#10)

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18
Süleyman KAYA tarafından yazılmıştır.

[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:


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:
Geri
Üst