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.





Hey!

Blogkafem'de okuduğunuz içeriklerle ilgili kişisel Twitter hesabım üzerinden benimle iletişme geçmek isterseniz Twitter adresim : www.twitter.com/aliarslan10

Sosyal medya hesabım dışında Blogkafem'de okumuş olduğun içerik ile ilgili belirtmek istediklerinizi aşağıdaki yorum formuna yazabilirsin. En kısa sürede dönüş yapacağımdan emin olabilirsin. :)

Okuduğunuz içerik faydalı olduysa #blogkafem etiketiyle okuduğunuz içeriğin linkini Twitter'da paylaşarak Blogkafem'e destek olabilirsiniz.

0 yorum:

Yorum Sayfası :



Yorum yaparken dikkat edilmesi gerekenler;

1. Yorum Formunu doldurduktan sonra Profil Seç -> ADI/URL bölümünden isminizi yazıp yorum yaparsanız size karşı bir hitap şeklimiz olur. (URL kısmını boş bırakabilirsiniz.)

2. Anonim olarak yaptığınız yorumlar "Adsız" olarak gözükmektedir.

3. Türkçe yazım ve dilbilgisi kurallarına uymaya özen gösteriniz.

4. Küfür,hakaret,mail adresi veya konu ile ilgisi olmayan reklam amaçlı website adresi içeren yorumlar yayınlanmamaktadır.

Custom Search

Kafemizde En Son Kim, Ne Demiş?

Kafeyi Dikizleyenler :)

Blog Istatistik

BLOGKAFEM.NET

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