Pointer (Göstericiler) ile Diziler Arasındaki İlişki

Yazar:



Daha önceki yazımda yazdığım pointer konusunun mantığını anladıysanız bunu anlamanız zor olmayacaktır. Tanımladığımız bir dizi içerisinde pointerları kullanarak gezebiliriz.

Örnek bizi dizi tanımlayalım.

int dizi[5] = {3,5,8,9,7};

Dizilerin mantığından da anlayacağınız üzere dizi içerisindeki her bir elemanın bir adresi bir de indisi vardır. İndis ve adres farklı şeylerdir. Mesela üstteki 5 elemanlı diziyi ele alalım.

0. indisteki eleman = 3 
1. indisteki eleman = 5
2. indisteki eleman = 8
3. indisteki eleman = 9
4. indisteki eleman = 7
 
(Bildiğiniz üzere dizi elemanları sıfırıncı indisten başlar.)

Bu değerler arasından 1. indisli 5 sayısını ele alacak olursak 5 değerinin bulunduğu indis 1'dir ama adresi 0x7ffd084 gibisinden karmaşık bir ifadedir.

Bildiğiniz gibi işaretçiler(pointer) adresler üzerinden işlemler yapmamızı sağlayan bir kavramdır. 

int *p;
p = dizi;

yaparsak eğer, biz dizinin 1. değerinin adresini p işaretçisine atamış oluruz. Başka bir ifade ile 0. indisin adresini, p'ye atamış oluruz.


Yani biz bu aşamadan sonra;
cout << *p;

yaparsak; ekrana dizinin 1. elemanını atamış oluruz. Peki dizinin diğer elemanlarına nasıl ulaşabiliriz?


Dizi içerisindeki ifadeler bilgisayar hafızasında sıralanmış ifadelerdir. Bunlar birbirleri ile bağlantı içindedirler. Bu sebeple biz;

p++;
cout << *p;

yaparsak... Dizinin 2. elemanını ekrana yazdırmış oluruz. Burada pointerın adresini 1 arttırdık. Pointer ifadesi dizinin ilk adresini tutuyordu. Yada başka bir ifade ile dizinin 1. elemanının adresini işaret ediyordu. Biz bunu bir arttırarak p'nin artık dizinin 2. elemanının adresini işaret etmesini sağladık. Çünkü biliyoruz ki dizi içerisindeki elemanların adresleri bilgisayar hafızasında sıralıdırlar.

Bakınız ekran görüntüsü :


Ben tek tek yazdırdım ama 1. cout ifadesini ve p++ ifadesini bir for döngüsü içine atarsanız tüm elemanları kolaylıkla ekrana yazdırabilirsiniz.


Ayrıca, pointerlar ile ekrana yazdırma işini, diziler gibi şu şekilde de yapabiliriz :




Konun daha rahat kavranması açısından basit örnekler verdim. Burada verdiğim örnekler mantığın kavranmasına yönelik örneklerdir. Aklınıza takılan yerleri aşağı kısma yorum olarak yazabilirsiniz.

0 yorum:

Yorum Sayfası :


Yorum formuna konuyla ilgili görüş ve sorularınızı bırakabilirsiniz.

Yorumunuza mümkün olan en kısa sürede dönüş yapılacağından emin olabilirsiniz.


Eklenen yorumlar, moderatör onayından sonra yayınlanmaktadır.

BLOGKAFEM.NET © Copyright 2008-2023
Sitedeki yazıların her hakkı BLOGKAFEM.NET sitesine aittir.
Kopyalanması halinde lütfen kaynak gösteriniz.
DMCA.com Protection Status
Anasayfa | Hakkında | İletişim