A Basic Pointer Example
C++’ta pointer kavramı, dilin düşük seviyeli kontrol anlayışının temel parçasıdır. Burada artık yalnızca değerlerle değil, bu değerlerin bellekte nerede durduğu ile ilgilenilir. Pointer bir değeri değil, o değerin adresini taşır. Bu ayrım küçük görünür ama fonksiyon çağrılarında kimin neye dokunabildiğini belirler.
Bir değeri fonksiyona gönderdiğinde kopya gönderilmiş olur. Bir pointer gönderildiğinde ise erişim gönderilir. Yani fonksiyon, çağıranın değişkenine doğrudan ulaşabilecek konumdadır. Bu da C++’taki en net prensiplerden birini doğurur: Erişim verdiğin anda sorumluluk da vermiş olursun.
Bu örnekte şunlar yapılır:
bir integer değişken tanımlanır,
bu değişkenin adresi bir pointer içinde tutulur,
pointer dereference edilerek değer okunur,
aynı adres bir fonksiyona parametre olarak gönderilir,
fonksiyon bu adres üzerinden hesap yapar.
Aşağıdaki kod, pointer kullanımının en temel hâlini gösterir.
#include <iostream>
int squareValue(int* value);
int main() {
int number = 5;
int* numberPtr = &number;
std::cout << "number is " << *numberPtr << std::endl;
int squaredNumber = squareValue(&number);
std::cout << "The square of number is " << squaredNumber << std::endl;
std::cout << "The number after squaring is " << number << std::endl;
return 0;
}
int squareValue(int* value) {
int squared = (*value) * (*value);
return squared;
}
Burada &number ifadesi, değişkenin değerini değil adresini gönderir. Fonksiyon tarafında alınan int* value bu adresi temsil eder. *value ise adresin gösterdiği yerdeki değere erişir.
Bu örnekte fonksiyon sadece okur ve sonuç döndürür. Bu yüzden number çağrıdan sonra değişmez. Ama fonksiyon içinde *value = (*value) * (*value); gibi bir atama yapılırsa, çağıran taraftaki değişken doğrudan değişir. Pointer’ın farkı budur. Değil “kare aldım”, “kimin verisine dokundum” meselesidir.
C++’ta bellek ve sahiplik konuları da aynı çizgide ilerler. Adresi paylaştığında, kontrol paylaşırsın. Kontrol paylaşıldığında, hatanın bedeli de paylaşılmaz, doğrudan sana yazar.