Ana içeriğe atla

C++' da İşaretçiler(Pointer)


Hepinize uzun bir aradan sonra, Merhaba. :) Final haftam nedeniyle burayı fazlasıyla boşladım. Fakat finallerim bitti ve umduğumdan çok daha iyi geldiler. Sanırım tek dersten kalarak bu dönem bitirdik. ;) Neyse çok uzatmadan bu günkü konumuza geçmek istiyorum. Bu gün belki de programlama dillerinde en önemli olan konulardan işaretçiler konusunu işleyeceğiz. Neden önemli peki? İşaretçiler bize bellekte tuttuğumuz bilgileri kontrol etmemizi sağlar. Bu bilgilerin nerden olduğunu, nasıl sıralabileceğimizi ve nasıl bağlantı kurabileceğimizi işaretçiler sayesinde gerçekleştiririz. Ben genelde işaretçi yerine pointer kelimesini kullanacağım. O yüzden pointer kelimesine alışmanızda fayda var. :)

Pointer C++'daki syntax'ı "değişken tipi *değişken adı" şeklinde tanımlanır. Bu pointer adresine erişebilmek "&değişken adı" şeklinde tanımlarız. Aşağıda paylaştığım kod parçası ile konuyu biraz daha inceleyelim.

#include <iostream>
using namespace std;
int main()
{
   int a=2016;
   int *pointer;
   pointer=&a;
   cout<<"a:"<<a<<endl;
   cout<<"*pointer:"<<*pointer<<endl;
   cout<<"pointer:"<<pointer<<endl;
   cout<<"&a:"<<&a<<endl;

}                           

Yukarıdaki kod bloğunda 5. satırda bir pointer değişkeni tanımladık. Bu değişkene 6. satırda a değişkeninin adresini atadık. artık pointer değişkeni a değişkeninin adresini tutacaktır. Daha sonra *pointer şeklinde çağırdığımızda pointer değişkeni bize a değişkeninin değerini getirecektir. Eğer "pointer" şeklinde çağırırsak (9.satırda) a değişkeninin adresini getirecektir. 10. satırdaki gibi çağırdığımızda da a değişkeninin adresi gelecektir. Bunu yazıp, derleyip çalıştırırsanız göreceksiniz.

Dizilerde pointer örneğide aşağıdaki kod blogunda mevcuttur.


#include <iostream>
using namespace std;
int main()
{
   int a[3]={1,2,3};
  int *pointer;
  pointer=a;
  for(int i=0; i<3; i++)
    {
      cout<<a[i]<<endl;
    }
  cout<<&a<<endl;
  cout<<pointer<<endl;
  cout<<*pointer<<endl;
  for(int i=0; i<3; i++)
    {
      cout<<pointer[i]<<endl;
    }

}                           

Yukarıdaki kod blogunda ilk for döngüsü a dizisini yazdırmaktadır. 11. satırda a dizisinin başlandıç adresleri bulunmaktadır. Aynı şekilde 12. satırda pointer değişkeni de dizimizin başlangıç adresini tutmaktadır. 13. satırımızda *pointer dediğimizde başlangıç adresindeki elemanları gösterir. ikinci for döngümüz ile de dizimizdeki elemanlara ulaşırız. Peki ya dizinin diğer elemanlarının bellekteki yerlerine ulaşmak istersek ne yapacağız. Onu aşağıdaki kod blogumuzda inceleyelim.

#include <iostream>
using namespace std;
int main()
{
   int a[3]={1,2,3};
  int *pointer;
  pointer=a;
   for(int i=0; i<3; i++)
    {
      cout<<pointer<<endl;
      pointer++;
    }

}  

Başlangıç adresini tuttuğumuz pointer değişkenini arttırdığımızda dizimizin değişken tipinin hafızada kapladığı yer kadar artacaktır. İnteger bir diziye sahibiz. İnteger elemanlara sahip bir dizinin her elemanı 4 bit yer kapladığı bellekteki adresler 4 bitlik olacak şekilde artacaktır. Böylelikle bellekte tuttuğumuz diğer elemanların adreslerine ulaşmış olacağız.

Bu konuyu anlamak için bol bol pratik yapmalısınız. Pointer konusu önemli bir konudur. Veri Yapıları'nın da temelini oluşturur.

Şimdiden kolay gelsin. :)

Yorumlar

Bu blogdaki popüler yayınlar

Algoritma Kavramı, Sözde Kod ve Akış Diyagramı

Bu yazımda çoğumuzun amelelik gibi gördüğü fakat belki de en önemli konu hakkında kısaca bilgi vermek istiyorum. Bundan sonra küçük örneklerle kod yazmayı arttıracağız. Programlama dillerinden bahsetmiştik geçenlerde. Yüksek seviyeli veya düşük seviyeli diller olsun hepsinin arasında kullanım farkları haricinde çok bir farkılılık yoktur. Hayatımızda kullandığımız koca koca programları, programlama dilleri değil onları hazırlayan algoritma kaynağı oluşturur. Kısaca algoritma kavramını tanımlarsak; Algoritma, belli bir problemi çözmek veya belli bir amaca ulaşmak için çizilen yoldur. Algoritma proglamlamada kullanılan en güzel tekniktir. Neyi nasıl yapacağımızı planlamamızı sağlar. Algoritmayı oluşturanda sözde kod ve akış diyagramlarıdır. ALGORİTMA ÖRNEĞİ(resim1) Sözde Kod:Yapacağımız algoritmayı kısa olarak sözle tanımlama yöntemidir. Örneğin; İki sayının toplamını veren algoritmanın sözde kodunu yazınız. 1)BAŞLA 2)YAZ(“1.sayiyi giriniz:”) 3)OKU(S1) 4)YAZ(“2.sayiyi g...

Örnek Algoritmalar ve Örnek C++ Kodları

Örneklerimize bu başlığımız altında devam ediyoruz arkadaşlar. :) Yıl başına kadar C++ hakkında bildiğim tüm konuları ve yaptığım projeleri sizlerle paylaşacağım. Sorularınızı yorumlarda bekliyorum. Şimdiden kolay gelsin :) Algoritma 5: Yarıçapı klavyeden girilen kürenin yüzey alanını ve hacmini açıklayan algoritmanın C++ kodunu yazınız.(π=3) #include <iostream> using namespace std; int main() { float r,alan,hacim; cout<<“Yaricapi giriniz:”; cin>>r; alan=4*3*r*r; hacim=(4*3*r*r*r)/3; cout<<“Alan:”<<alan<<endl; cout<<“Hacim”<<hacim<<endl; } Algoritma 6: Katsayıları klavyeden girilen birinci dereceden denklemin kökünü bulan algoritmanın C++ kodunu yazınız. #include <iostream> using namespace std; int main() { int a,b,c,x; cout<<“Katsayilari giriniz:”; cin>>a>>b>>c; x=(c-b)/a; cout<<“Kok:”<<x; } Algoritma 7:Klavyeden yarıçapı ve dilim açısı girilen daire diliminin...

Hayatımıza Birbirinden Farklı Çözümler Sunan Problemler: Algoritmalar

Merhaba arkadaşlar, Başlıktandan anlayacağınız gibi, hayatımıza birbirinden farklı çözümler sunan problemler topluluğu olarak algoritmayı tanımlayabilirim. Bu yazı serimizde algoritmaları tek tek tanıyıp çalışma mantıklarını inceleyen analiz eden, birden farklı çözümleri karşılaştırarak gerekirse kendimizde çözümler üretebileceğimiz bir seri yaratacağız. Algoritmalar bilmece bulmaca gibidir. Üzerinde düşündüğünde ufkunuzu açar. Bu seriyi hazırlama sebebimde ufkunuzu biraz olsun açmak oldu. Bu seriye başlamadan önce bir algoritmayı tanımlarken kullanacağımız terimleri tanıtmak istiyorum. Ayrıca algoritmaların pseudo kodlarıyla Java kodlarını da paylaşacağım. Belki Swift ile olan kodlarını da paylaşabilirim. ;) Ayrıca bu kodların toplu halde github hesabımdan erişim sağlayabilirsiniz. Şimdi algoritma dünyasını daha derinden tanıyalım. Algoritma nedir? Bir problemi çözmek için işlenen komutlar kümesine, algoritma nedir. Çözülebilir Problem nedir? Bir problem için algoritma oluşt...