Bir Yapı (Bağlı Liste) ve Gerçeklenmesi (C++ Kodlama)

Bu Eğitim vidyosuda Nesneye dayalı programlama prensiplerine bağlı kalınarak aşşağıda ki konular işlenmeye çalışılmıştır. Ayrıca kod test edilerek ve debug işlemleri ile incelenerek geliştirilmiştir.
Delete işlemleri ilk iki class için yapılmış diğer classlarda zaman almaması için gerçeklenmemiştir.

Konular – İçerik:

  • Giriş – Senaryo(0-8:45 dk)
  • Bağlı liste (8:45) yapısının oluşturulması

    4 adet class(Karakter,Dugum,BagliListe, Yonetim,) + Main.cpp oluşturularak Bir bağlı  liste üzerinde ekleme işlemleri gerçekleştirildi.

  • Bağlı liste yazdırma(1:43:00- 1:53:40)
  • string(char) tipli sayıların toplanması (1:53:40 – 2:08:00)
  • Operatör Aşırı Yükleme (Fonksiyonla benzerliği) (2:08:00 – 2:15:00)

Sorularınız ve Önerilerinizi yorum yazarak belirtebilir diğer okurlarada takıldığınız konularda bilgi aktarımını sağlayabilirisiniz.

Dökümanlar ve Kodlar: https://www.dropbox.com/sh/llycfi61is4yreo/AAD5tukR3meWxgYUVGTW_k8_a?dl=0

Abdullah Salih BAYRAKTAR

Bir Probleme nasıl yaklaşmalı – Veri yapıları – Algoritma – Ödev

Bir bilgisayar programcısının ödeve(projeye) bakması gereken açıyı anlatmya çalıştım.

İçerik :

  1. Ödev dökümanı nasıl okunlmalı,
  2. ekrana şekil bastırma (çıktıyı düzenleme)
  3. Nesneye dayalı programlama,
  4. cout aşırı yükleme (function overloading)- 35:52 dk,
  5. hep bellek bölgesi (new)
  6. eden çöpleri toplamalıyız: (delete)
  7. Örnek bir uygulama incelendi

Birkaç aksaklık (girişte biraz heycan, static 🙂 ) olsada, faydalı olması dileğiyle…..

Dökümanlar:
https://www.dropbox.com/sh/jwar422ozjtxo36/AAAH0osmak05V8rJTuWbZ3ZBa?dl=0

Not: İlk anlatılan dökümanda(ödev dokumanı): Sepet içinde çivilerin bulunmsa durumu değilde, Sepetlerin Çiviye asılamsı durumu istenmiş görselde de gösterilmiş. Yani harfler Çivi değil.

çivi

Keywordler: Veri yapıları, Ödev1, Sakarya Üniversitesi, Bir yaklaşım, Problem Çözme, Algortima geliştirme, Ödev yapmak, Bilgisayr Mühendisliği, c++

Yanıyorduk Kardeşim – Şiir

01.07.2014- Gazze Bombardımanı

01.07.2014- Gazze Bombardımanı

Yanıyordu seni, beni ısıtmak için
Yanıyordu bir şey;  senin için, benim için
Yanıyordu tabi ki Allah (c.c.) rızası için

Sadece yanmıyordu yakıyordu aslında
Kömür, yok yok petroldü sanki
Belki yürekti: senin ki, benim ki

Evet evet bu özeldi
Yakıyordu kendini
Sadece ısıtmak içindi seni, beni

Neredeydi harbi?
Suriye’de yok yok Filistin’di sanki
Yanıyorduk kardeşim dünyada harbi…

Abdullah Salih BAYRAKTAR

Bu şiir 01.07.2014 tarihinde Bombalanan Gazze için yazılmıştır. Biliyoruz ki ölmek mümin için son değil, kutlu bir başlangıçtır.

Dağıtımda Optimizasyon Vogel Algoritması ( C# )

Bu yazımda hem bir algoritmadan hemde C# taki ilk kapsamlı form uygulamamdan bahsedeceğim.

Ekran Göörüntüsü

Kodların GitHub linki: https://github.com/AbdullahBay/Uygundagilim

Çalıştırılabilir Dosya: https://www.dropbox.com/s/429xrtjky5q2odk/ayrik.exe

Ana Ekran

Ana Ekran

Örnek Problem ve Çözümü

Örnek Problem ve Çözümü

Abdullah Salih BAYRAKTAR
Alıntı yaparken link veriniz.

Cmd de Java Konsol uygulaması çalıştırmak.

Bu yazımda Cmd de Java Konsol uygulamasını nasıl çalıştırabileceğimizi anlatacağım.

1. Adım: jar dosyası oluşturma

Çalıştırılabilir jar (.exe gibi) oluşturma işini eclipse’te export yardımıyla yapabiliyoruz.(bu sadece bir seçenek ve ben bu yazımda sadece bundan bahsedeceğim.)

export

Projemizi jvm için derleyelim

1. Package Explorerda Projemize sağ tıklıyoruz
2. Export’a tıklıyoruz
3. Java/Runnable JAR File seçiyoruz
4. Yeni ekranda oluşacak jarık konumunu seçiyoruz(Export destination). Launch Configuration seçeneği altında çalışacak olan ana sınıfı seçiyoruz. Eğer kullandığımız kütüphaneler varsa “Package required libraries into generated JAR” seçeneğini seçmeyi unutmuyoruz.
5. Finish ile sonlandırıp jarımızı oluşturuyoruz.

2.Adım: Java ayarlarını yapmak (Windows için)

Bilgisayarınızda javanın kurulu olduğunu varsayıyorum. Ki zaten java yoksa eclipse çalışmayacaktır. Ayarları yapmaya başlayalım.

Path Ayarları

Path Ayarları (Windows)

  1.  Bilgisayarım’a sağ tıklıyoruz özellikleri seçiyoruz
  2. Gelişmiş sistem ayarlarına tıklıyoruz.
  3. Gelişmiş sekmesinden  Ortam değişkenlerini açıyoruz
  4. Daha sonra Sistem değişkenleri altındaki PATH değişkeninin sonuna  “;C:\Program Files\Java\jre1.5.0_02\bin” i ekliyoruz. {\jre1.5.0_02\ versiyonu belirtir,sizde farklı olabilir kontrol ediniz}
  5. Ve şimdi artık java komutu sorunsuz çalışıyor olmalı.

Adım3: .jar isimli kendi yazdığımız programımızı cmd de açalım.cmd

  1. cmd (konsol)da  .jar dosyasını oluşturduğumuz klasöre gidiyoruz. Burada kasörü açıp adres çubuğuna cmd yazmak pratik oluyor.
  2. konsola şunu yazıyoruz “java -jar programımızınadı.jar” ve enterlıyoruz.
  3. Programınız çalışıyor olmalı.
  4. Her zaman bu işlemi yapmak istemiyorsanız Pratik bir yol:  metin editörünüzü açın ve içine “java -jar programımızınadı.jar” yazın sonra bunu jar dosyanızın yanına  istediğiniz-isim.bat diye kaydedin. çalıştırdığınız da programınız konsolda açılacaktır.

Abdullah Salih BAYRAKTAR

Ubuntu/Linux Mint’te LAMP kurulumu

Bu kurulum Ubuntu 12.04 LTS ve Linux Mint 15 sürümlerinde denenmiştir

Lampserver:

1. Uçbirimi açıyoruz. sudoapt-getinstalllamp-server^

2. indirmeyi başlatmak için “y” diyoruz.

Phpmyadmin:

1. Uçbirimi açıyoruz. sudoapt-getinstallphpmyadmin 1. indirmeyi başlatmak için “y” diyoruz.

2. Otomatik ayarlama için http sunucusu seçmemiz isteniyor (alternatifler) :Nginx (engine-x, njinx), apache ve Lighttpd (lighty);

3. Komut satırında kontrolü etkinleştirilsin mi?(Configuredatabaseforphpmyadminwithdbconfig-common?) Yes

4. Şifre phpmyadmin için:

5. Mysql için pasword:

6. Pasword kontrol: tekrar gir:

7. Do thisfirst: sudogedit /etc/apache2/apache2.conf

8. addthislinesomewhere: Include /etc/phpmyadmin/apache.conf

9. andfinallyrestartapache: sudo/etc/init.d/apache2 restart

Not: bağlantı hatası veya başka hata alıyorsak app-get i güncellememiz gerekebilir.

Update komutu : sudoapt-getupdate

Örn hata: Err http://us.archive.ubuntu.com/ubuntu/ quantal-updates/main php5-common amd64 5.4.6-1ubuntu1.4 404 NotFound [IP: 91.189.91.15 80] Err http://security.ubuntu.com/ubuntu/ quantal-security/main php5-common amd64 5.4.6-1ubuntu1.4

Tek tek kurulum:

1. sudoapt-getinstall apache2

2. sudoapt-getinstallmysql-server

3. sudoapt-getinstall php5 libapachveyasudoapt-getinstall php5 php5-gd php5-mysql php5-curl php5-cli php5-cgi php5-dev

Mikro Denetleyiciler (16F877A)

Bir mikro denetleyici (PİC, MCU veya µC), aşağıda sayılan bileşenlerle tek bir tümleşik devre üzerinde üretilmiş malzemeye denir.

  1. Mikroişlemci
  2. Merkezi işlem birimi(MİB)
  3. Hafıza
  4. kristalOsilatör
  5. zamanlayıcılar (timers)
  6. seri ve analog giriş çıkışlar
  7. programlanabilir hafıza (NOR Flash, OTP ROM).
microcontrolador-pic-16f877a

Bir bilgisayar mühendisinin yazdığı kodları bilgisayar dışında daha somut bir platformda görmek ister diye düşünüyorum. Sizde böyle düşünüyorsanız bunun kolay yolu bir Mikrodenetleyici (PİC) ile çalışmaktır. Tabi bu iş kolay olduğu kadar öğrenci için ucuz bir iş değil ne yazık ki. Fakat bir 100 tl bütçe ayırarak temel malzemeleri elde edebilirisiniz.

İlk projemde Kullanılan malzemeler ve fiyatları:

Malzeme adı ve adet Fiyatı
1 Adet 16f877A Mikro denetleyici 8,00tl
1 adet 10kohm‘luk direnç 0,10tl
2 adet 220ohm‘luk direnç 0,20tl
3 adet led 0,30tl
1 adet 4kmhz lik kristal 1,00tl
1 er metre kırmızı mavi kablo 1,00tl *emin değilim
2 adet 22 pfarad kondansatör 0,50tl
1 adet usb uzatma kablosu 1,00tl
1 adet Küçük Buzzer 1,00tl
ARA TOPLAM 13,10TL
1 adet PIC programlayıcı(Pickit 2) 85,00tl
TOLAM 98,10TL

Yukarıda da görüldüğü gibi aslında çok maliyetli olmayan bir uğraş fakat bir seferliğine bir adet PİC-Programlayıcı almanız gerekiyor. Hatrı sayılır bu parayı vermezseniz benim gibi 3 ay boyunca evde devre kurmaya uğraşır durursunuz. Şevkiniz kırılmaz ise bu uğraşlar insana tecrübe ve elektronik bilgisi katıyor o bir gerçek.

Bu konudaki tavsiyem meslek lisesinde veya üniversitede iseniz hocalarınızdan veya okuldan temin etmeniz ya da konu ile ilgili bir ödünç tanıdıktan almanız.

Kodumuzu Yazalım

Bunun için bir IDE(Entegre Geliştirme Ortamı) ‘ye ihtiyacımız var. Ben ilk uygulamamda Micro C-IDE sini kullandım. IDE’ler arasında farklılıklar var o yüzden hangisine karar
verdiyseniz o IDE ile yazılmış kodlara bakmanız yoksa ilk başta kafanız çokça karışır. Aslında mantık aynıdır fakat ifade tarzı (syntax) farklı olduğu için kavramak zor olur.

Kodumuzu görelim ve açıklamaya devam edelim.
Micro C programını kurup çalıştırıyoruz.
File->New->NewProject diyoruz.
Açılan Wizard dan Proje ismi, kaydedilecek yer, Micro işlemcinin Adı(16F877A) ve Kristal hızını (4.000000mhz) seçiyoruz. Diğer ayarlara şuan bakmadan Finish’i görene kadar next diyoruz.
Editör sayfamızda aşağıdaki kod bloğu karşımıza geliyor

[code language=”cpp”]
void main() {
}
[/code]

Açılan Pencereye aşağıda gördüğümüz kodu yazıyoruz

[code language=”cpp”]
void main ()
{
trisb=0; // trisX=0; ile o porta ait 8 bacağı çıkış olarak ayarlıyoruz.
trisc=0;

portb=0b11111111; // portX= 0b11111111 ile çıkış bacaklarınapotansiyel (volt) gönderiyoruz.
portc=0b11111111;

while(1)
{
portb= 0b11111111;
portc.rc7=0;
delay_ms(200);
portb= 0b00000000;
portc.rc7=1;
delay_ms(200);
}

}
[/code]

Burada ikili (binary) sayı sistemini kullanıyoruz. Bu yüzden değerirn başında “0b” bulunuyor ve bu sayının binary olduğunu ifade ediyor.Ondan sonra gelen 8 rakam sırası ile port bacakların potansiyel (volt) değerlerini belirliyor. Bu değerler digital çıkışta 0 için 0-Volt iken 1 için (-5)-Volt oluyor.

portb=0b11111111; değeri ile bportınun 0 dan 7(dahil) ye kadar olan 8 bacağının (-5)-Volt çıkış vermesini sağlıyor. Aynı işlemi portc içinde tekrarlıyoruz.

Programın sürekli çalışması için Sonsuz döngü [ while(1) ] içine alıyoruz ve içeride yapılacak işlemleri döngü parantezleri [  { kodlar  }  ] içerisinde sırayla tanımlıyoruz.

Döngü kod bloğumuz sırayla

  1. Portb’nin tüm bacaklarını (-5)-Volt
  2. Portc’nin 7. Bacağını 0- volt yapıyor ve
  3. 200 ms yani 0,2 saniye bekliyor (10–3milisaniye =1saniye)
  4. port b nin tüm bacaklarını 0-volt
  5. Portc’nin 7. Bacağını (-5)-Volt yapıyor ve
  6. delay_ms(ms cinsinden değer) fonksiyonu çağırılarak 0,2 saniye bekletiliyor
  • Bu işlem den sonra döngü başına gidilip tüm işlmeler elektrik kesilene kadar devam ediyor.

Kodumuzu yazdık, derlemeden önce kullancağımız kristalle ilgili ayarı yapmamız gerekiyor. Bunu için

Project->Edit Project e tıklıyoruz ve açılan pencerede PİC Türümüzün seçili olduğunu görüyoruz(16F877A). Aşşağıdaki ayarları sırası ile yapıyoruz.

edit project

  1. Oscillator Selection: seceneğinden XT Oscillatör’ü seçiyoruz
    • XT : Dışarıdan takılan kristalde kullanılıyor.
    • HS: PİC in dahili kristali var ise onu kullanmak için seçilebilir. (16F877A dahili kristale sahip değil)
  2. Kristal frekansımızı başta seçtik kontrol edebilirz ben 4.000000 mhz lik kristal kullandım.

Ve kodumuzu Mikro işlemcinin anlayacağı dile çeviriyoruz(derliyoruz). Derleme işlemini Ana menüdeki (Build->Build) tuşlarına basarak gerçekleştiriyoruz. “Finished successfully “ yazısını altta bulunan Message Penceresinde gördüğümüzde kodumuz sorunsuz derlenmiş ve ihtiyacımız olan (PİC imizin anlayacağı kod) <projeadı>.hex uzantısı ile oluşuyor.

Kodu Bilgisayar ortamında deneyelim(Proteus):

Proteus Programını bilmiyorsanız bu bölümü geçiniz. Ama bu işle uğraşacaksanız öğrenmenizi tavsiye ederim.

Bu kodun çalışmasını bilgisayar ortamında denemek için devre çizme araçlarından biri olan proteus’ta gerçekleyelim.

devre

Proteusu kuruyoruz ve devremizi proteus-isis arayüzünde oluşturuyoruz. Ve PİC’in üzerine 2 kez tıklayarak Program file : kısmına .hex uzantılı dosyanın konumunu gösteriyoruz.

Devrenin simülasyonunu görmek için sol alt taki başlat butıonuna basıyoruz ve her şey yolunda ise ışıkların yanıp sönmesini görebiliyoruz.

Devre Kurulumu

Biraz elektronik bilgisi birazda araştırma ruhu varsa iş yürüyor. Azmin elinden kurtulacak bir şey yoktur.

ordd

Önce resmi görelim ve sonra resim üzerinden konuşalım. Buradan daha açık gözüktüğünden dolayı proteus devreside gözden geçirilebilir.

Pic

Not: PİC de bacaklar 1. Bacak PİC üzerinde girinti şeklindeki nokta ile belirilmiştir ve u şeklinde 1 den 40 a kadar gider (16F877A da 40 bacak var).

Burada önemli olan şu ki 1. Bacak reset bacağıdır ve 0-volt verildiğinde PİC’i durdurur (resetler). Ortamdaki koşullardan etkilenmemesi içi o bacağa 5- volt bağlanması gerekir. Burada potansiyel direnç üzerinden geçirilir ki bu şekilde PİC’inistenilen potansiyeli alması fakat fazla akıma maruz kalmaması sağlanır.

Hangi paçanın hangi bacağa bağlanacağı Proteus çıktısında bacak numaralarıyla gösterilmiştir.

Devreyi kuralım ve bir adet usb kablosu ile 5 voltluk gerilimi borda verelim. Enerji kaynağı olarak hem bilgisayardan hemde bir pirizden yararlanabilmek için Bir usb uzatma kablosunun Dişi kısmını keserek Kırmızı(5 volt) olan kabloyu  + volta, siyah (0 volt) kabloyu ise  – volta(torak-ground) yani toprağa bağlıyoruz.

Kablonun görüntüsü :kablo

Programı PİC’e atmak.

Bu işlem için Yukarıda bahsettiğimiz PİC programlayıcıya ihtiyacımız var. Bu konuda farklı markaların farklı ürünleri var. Biz PİCkit 2 programlayıcısını kullanacağız.

Programlayıcının CD sinden veya web sitesinden indirdiğimiz Programı bilgisayarımıza kuruyoruz. PİCkit2 cihazını usb üzerinden bilgisayarımıza bağlıyoruz. Programı başlatıyoruz. Ve karşımıza gelen ekranda PİC in algılandığını ,ismini , ve yazmaya yazır olunduğu bilgilerini göreceğiz. Program üzerinde Vdd PİCkit2 kısmındaki volt değeri Otomatik ayarlanmadı ise volt değerini 5 Volt a ayarlıyoruz.

pickit pro2

Bu işlemlerden sonra: “File->İmportHex”  i seçerek hex uzantılı dosyanın konumunu programımıza gösteriyoruz. Konum gösterme işlemi bittiğinde(Tamama Tıkladığımızda ) ,Program memory kısmında hez kodunun 16 sayı sisteminde gösterildiğini göreceksiniz.

PİC bilgileri doğru ve yıkarıda bahsedilen ayarlar yapıldı ise Write butonuna tıklayarak Kodun PİC’ e aktarılmasını sağlıyoruz .

pickit 2

PİCkit2 den PİC’i söküyoruz ve devrede yerine takıyoruz. ( Bu işlemler sırasında PİC’in yanmaması için devreye elektrik vermemiş olmamız gerekiyor) .

PİC imizi devreye takıp Usb den aldığımız 5 voltu devreye veriyoruz ve devrenin çalıştığını gözlemliyoruz.

Linkler

PİC Programlayıcı :http://www.delab.net/PICKit2-Programmer,PR-1.html

PİC Programlayıcı Resmi sitesi : http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023805&redirects=pickit2

Direnç skalası : http://www.biltek.tubitak.gov.tr/gelisim/belektronik/resistor.html

İşaretçiler namı diğer “Pointer”

Bu yazımızda işaretçilerden bahsedeceğim.                       İşaretçi= Adres tutucu=Pointer;

       İşaretçiler bellekten aldığınız yerin adresini tutmada kullanılır. Bir işaretçiyi “ int *pIsaretciAdi; ” şeklinde kodlayarak oluştururuz. İşaretçilerin başlarına p harfini koyarız ki onun işaretçi olduğunu unutmayalım. Sizde bunu standart haline getirseniz iyi olur.

işaretçi

  1. Şekilde görüldüğü üzere ilk verilen tip pointerin değil tutulmak istenen tipi işaret eder bu tip: char, int, double… olabilir. Fakat pointerin tipi herzaman “int” dir
  2. Yıldız sayısı arttıkça pointerin derecesi artar. Peki  ya bu ne demek? Yeni başladıysanız sizin için önemli değil fakat pointerıda bir pointerda tutma ihtiyacı hissediyorsanız burada yıldısayısı arttıyor. (bir dahaki yazımda bu konuyu anlatacağım)
  3. işaretçiye vermek istediğiniz ism başına p koymak ide’lerde işaretçileri ayırt etmenizi sağlar.

İşaretçiler bellekten aldığınız yerin adresini tutmak için c/c++ dilinde vardırlar.
Stack (dinamik olmayan) hafızada oluşturduğumuz değişkenlerin adresleri değişken adında tutulduğu için zaten bellidir o yüzden tekrar bir işaretçiye genelde ihtiyaç duyulmaz. Fakat kullanmakta mümkündür.

Örnek verecek olursak

[code language=”cpp”]
int a;  // dediğimizde stackden yer almış oluruz ve
//bunun adresini zaten “a” değişkeni tutuyordur.
int* pA=&a;  // şeklinde a’nın adresini yinede tutabiliriz.
[/code]

Fakat dikkat edilmesi gereken bazı hususlar vardır. Bir stack verisi kod bloğu bittiğinde silinir.

Yani

[code language=”cpp”]
{
int a=5;
int* pA=&a;
return pA;
}
[/code]

Diyerek döndürdüğünüz pointerın (pA)  tuttuğu adrese erişmek istediğinizde kod bloğu bitmiş olan a değişkeninin yeri boşaltılmış (serbest bırakılmış) olacağından hatalı erişim sağlamış olacaksınız, sadece hatalı olsa iyi belki o hücreye başka programlar tarafından farklı değerler yazılmış olma ihtimali ile karşılaşacak, yanlış değerle işlem yapacaksınız yada başka programın kullandığı hücreyi kullanarak diğer programaın akışını bozacaksınız.

Bu durumu gidermek istersek pA pointerının tuttuğu adresi (yeri) de heapten almalıyız.

[code language=”cpp”]
{
int* pA= new int;
*pA=5;
return pA;
}
[/code]

Bu ise yukarıda görüldüğü gibi “ int * pA= new int; “ şeklinde alınır.

Burada yapılacak en büyük hata tek int’lik yer alınmasına rağmen

[code language=”cpp”]
*(pA+1)=25; /*veya*/ cout<<pA[2]; // ikiside hatalı
[/code]

Sıfırıncı hücre dışındaki hücrelere erişimin sağlanmasıdır. Bu tamamen sizin kontrol etmeniz gereken bir durumdur.(genelde bu hata döngülerde programcının gözünden kaçar)

Şu unutulmamalı ki her pointer bir adres tutar. Ve işaretçinin adı yazıldığında tuttuğu adrese, başına “*” koyduğunuzda adresteki değere, başına “&” koyduğunuzda ise işaretçinin adresine ulaşırsınız.
Adsız

İşaretçiye ihtiyaç stack (dinamik) hafızadan alınan verilerin adreslerinin sadece bir seferliğine yani alınırken erişilir olmasından kaynaklanır.

[code language=”cpp”]
new int[2];
[/code]

Yazılması durumunda hafızadan 2 integerlik yer alınacak new fonksiyonu tarafından dizinin ilk adresi döndürülecektir fakat siz bu adresi tutmazsanız size ait olan yere tekrardan ulaşamazsınız.
İşte bu dönen adresleri tutmak için oluşturulmuş tipler pointerlardır.

[code language=”cpp”]
int* pA= new int[2]; // 2 integer kadar yer alındı ve
//dönen adres pA pointerına atandı.
*pA=5; // ilk adreste bulunan yere 5 atandı.
pA[1]=7; // ikinci adreste bulunan yere 7 atandı
[/code]

Burada atama işleminde pointer iki şekilde kullanılmıştır.
a) “*pA” pA bir adres tutucusuydu, önüne yıldız (*) konulduğunda o adresteki veriye erişim sağlanmış olur.
a. Diğer hücrelere erişmek için ise *pA, *(pA+1), *(pA+2), *(pA+3)… şeklinde kodlanır.
b. Buradaki “pA+1” toplanan sayı yani +1 diğer değişkene geçmek demekti. Değişkenin türü int ise ,integer 4 baytdir, (pA’nın tuttuğu adres+4) anlamına gelir.
1
b) “pA[1]” Adres tutan pA pointerina indis verilince derleyici içine erişilmek istediğini anlıyor ve [ ] indisin içindeki değer ne ise o indisin ifade ettiği hücreye işlem yapmaya başlıyor.
a. Diğer hücrelere erişmek için pA[0], pA[1], pA[2], pA[3]… gibi kullanılabilir. Resimde görmek için tıklayınız.

Küçük bir program üzerinden anlatmaya devam edelim. Bu program aşağıda yazılan işleri sırası ile yapacaktır:
1. Stackden bir pointer yeri alacak
2. Sonra o pointer’a heapten aldığımız 5 int’lık yerin ilk adresini tutacak
3. Bu 5 elemanlı dizinin 5 elamanına (indisi^4) atanacak (ilk for)
4. Ve sonra Değer ler tek tek bastırılacak. (ikinci for)

Pointer-Örnek:

[code language=”cpp”]
#include<iostream>

using namespace std;

int main ()
{
int* pIsaretci= new int [5];

for (int i = 0; i < 5 ; i++)
{
*(pIsaretci+i)=i*i*i*i; // i^4= i*i*i*i;
}

for (int i = 0; i < 5; i++)
{
cout<<"Deger "<<i<<"= "<< pIsaretci[i]<<endl;
}
return 0;
}
[/code]

2
Resim: Program ekran çıktısı
Uygulamada işaretçi ile olan iki erişim yöntemini de kullandık.
1. *(pIsaretci+i)
2. pIsaretci[i]
Tek dereceli işaretçilerde kapalı parantezli yöntem daha anlaşılır ve kullanışlı oluyor.

Tüm içerik Abdullah Salih BAYRAKTAR tarafından hazırlanmıştır.