Tuesday

13

December

2016


0

YORUM


Compe 225 | C++ Ders 9 – Pointer Nedir ?

7 ay önce yazıldı, 7 ay önce güncellendi.

c++,ders notu,derslerid,konu anlatımı,kullanımı,mantığı,nedir,örnekleri,pointer,davutkara( Karmaşanın ilk başladığı nokta. )
Pointer her ne kadar zor görünsede, aslında mantıksal ve basittir. Bunu tek bir cümle içinde açıklayabilirim.
Pointer Nedir ? : Bir değişkenin tanımlı olduğu yer dışında, kullanımına ve değiştirilmesine olanak sağlayan şey.

Yani mesela main içinde tanımladığımız bir değişken sadece main içinde kullanılabilir. Daha doğru bir cümle kurarsam. Her değişken kendi tanımlı olduğu scope içinde kullanılabilir.

int main(){	
int a = 3;	
{
int b = 5;	
}
// b burada tanımsız. ama a tanımlı.	
}

Scope un süslü parantezlerin içi olduğunu söylemiştim. Yukarıdaki örnek doğrudur. b veriable ı kendi bulunduğu scope içinde tanımlıdır dışarsında tanımlı değildir.

(Bunlar aslında temel bilgiler ancak, önemsenmediği için dikkat edilmiyor, output sorularında çat diye gider 😀 )

Aslında bu durumu for döngüsünden hatırlıyor olabilmemiz lazım for döngüsü kurarken tanımladığımı i değişkeni dışarıda kullanılamıyordu. Çünkü oradaki i forun altında bulunan scope (tekrar yazıyım süslü parantez içi) içinde geçerli.

Hadi şimdi şu örneğe bakalım:

#include <iostream>
int main(){	
int a = 3;
int *d; // Bu pointer.
{
int b = 5;
d = &b;	 // Pointera  b nin adresini aktar	
}
std::cout << *d;	 // Pointerın içindeki adresin göserdiği değeri al
}

Aradaki farkı inceleyiniz, ve anlamaya çalışınız.

Bir pointerı tanımlarken tek fark normal değişken tanımlarken değişkenin başına * yıldız/çarpı işareti koymak oluyor. Buraya kadar her şey tamam.

Şimdi bu pointerın nereyi göstereceğini belirtmemiz için herhangi bir veriable ın adresini değişkene aktarıyoruz.

d = &b;  dediğimizde d pointerıın içeriği b nin adresini gösteriyor (& adres alır.)

Şimdi pointerın gösterdiği adresin içeriğine erişmek isterkende pointerın başına yine * yıldız/çarpı işareti koyuyoruz.

*d; artık d nin içinde barındırdığı adresin içeriğini gösteriyor.

Yukardkai örnek biraz alışılagelmişin dışında görünebilir ama aynı şey. Normalde fonksiyon ile yaptık, bir fonksiyonun içindeki değişken başka bir fonksiyonda tanımlanmaz bunun sebebi scope lar.  Ama biz bir scope içinde tanımladığımız değişkenin adresini başka bir scope a yollarsak örneğin function a parametre olarak , artık o değişkene diğer fonksiyondada erişebiliriz. Erişim yaparken * kullanıyoruz. Atama yaparkende herhangi bir işaret kullanmadan pointer = & veriable; şeklinde yapıyoruz.

Bu temel şeyler oturduğunda, Derslerin başındada dediğim gibi. Her şeyi her şeye bağlayabiliyoruz.

Not: temel c dersi alırken (cmpe113) pointer ile alakalı bir video hazırlamıştım, c++ dada neredeyse aynı kullanım olduğu için şurdaki videodan izleyebilirsiniz.