Pointer (işaretçi), bir değişkenin bellekteki adresini tutan bir değişkendir. C++’ta bellek yönetimi, dinamik bellek tahsisi ve diziler üzerinde işlem yapmak için pointer’lar çok önemlidir.
1. Pointer Tanımlama ve Kullanımı
Pointer tanımlarken *
(yıldız) operatörü kullanılır:
veri_tipi *pointer_adi;
Örneğin:
int *ptr; // Bir int türünde pointer tanımlandı
2. Pointer ile Değişkenlerin Bellek Adresine Erişmek
Bir pointer, bir değişkenin adresini tutabilir. &
(ampersand) operatörü, bir değişkenin bellek adresini verir.
#include <iostream>
using namespace std;
int main() {
int x = 10;
int *ptr = &x; // x'in adresini ptr'ye atıyoruz
cout << "x'in degeri: " << x << endl;
cout << "x'in adresi: " << &x << endl;
cout << "Pointer'in tuttugu deger (adres): " << ptr << endl;
cout << "Pointer'in işaret ettiği deger: " << *ptr << endl;
return 0;
}
Çıktı:
x'in degeri: 10
x'in adresi: 0x61ff08
Pointer'in tuttugu deger (adres): 0x61ff08
Pointer'in işaret ettiği deger: 10
📌 Pointer ptr
, değişkenin adresini tutar ve *ptr
ile bu adresin içindeki değere erişebiliriz.
3. Pointer ile Değer Değiştirme
Pointer’ı kullanarak bir değişkenin değerini değiştirebiliriz.
#include <iostream>
using namespace std;
int main() {
int x = 5;
int *ptr = &x;
*ptr = 20; // Pointer ile x'in değerini değiştiriyoruz
cout << "x'in yeni degeri: " << x << endl;
return 0;
}
Çıktı:
x'in yeni degeri: 20
Pointer sayesinde değişkenin bellekteki adresine erişerek doğrudan değerini değiştirdik.
4. Pointer ve Diziler
Pointer’lar, dizi elemanlarına erişmek için kullanılabilir.
#include <iostream>
using namespace std;
int main() {
int dizi[] = {10, 20, 30, 40, 50};
int *ptr = dizi; // Dizinin ilk elemanının adresini tutar
cout << "1. eleman: " << *ptr << endl;
cout << "2. eleman: " << *(ptr + 1) << endl;
cout << "3. eleman: " << *(ptr + 2) << endl;
return 0;
}
Çıktı:
1. eleman: 10
2. eleman: 20
3. eleman: 30
5. Pointer Aritmetiği
Pointer’lar ile adresler üzerinde matematiksel işlemler yapılabilir.
İşlem | Açıklama |
---|---|
ptr + 1 | Bir sonraki elemana gider |
ptr - 1 | Bir önceki elemana gider |
*(ptr + i) | i kadar ilerleyip o değeri okur |
Örnek:
#include <iostream>
using namespace std;
int main() {
int dizi[] = {5, 15, 25, 35};
int *ptr = dizi;
cout << "İlk eleman: " << *ptr << endl;
ptr++; // Bir sonraki elemana geç
cout << "İkinci eleman: " << *ptr << endl;
ptr--; // Geri dön
cout << "Tekrar ilk eleman: " << *ptr << endl;
return 0;
}
Çıktı:
İlk eleman: 5
İkinci eleman: 15
Tekrar ilk eleman: 5
6. Dinamik Bellek Kullanımı (new – delete)
C++’ta dinamik bellek tahsisi için new
ve delete
operatörleri kullanılır.
#include <iostream>
using namespace std;
int main() {
int *ptr = new int; // Dinamik olarak bir bellek alanı oluştur
*ptr = 50;
cout << "Pointer'in tuttugu deger: " << *ptr << endl;
delete ptr; // Belleği serbest bırak
return 0;
}
Çıktı:
Pointer'in tuttugu deger: 50
Bellek sızıntısını önlemek için delete
kullanmayı unutmamak önemlidir.
7. Dinamik Dizi Kullanımı
Dinamik diziler new[]
ve delete[]
operatörleri ile oluşturulur.
#include <iostream>
using namespace std;
int main() {
int *dizi = new int[5]; // 5 elemanlı dinamik dizi
for (int i = 0; i < 5; i++) {
dizi[i] = (i + 1) * 10; // 10, 20, 30, 40, 50
}
for (int i = 0; i < 5; i++) {
cout << dizi[i] << " ";
}
delete[] dizi; // Belleği serbest bırak
return 0;
}
Çıktı:
10 20 30 40 50
8. Pointer ile Fonksiyon Kullanımı
Pointer’lar fonksiyonlara adres olarak geçirilebilir.
#include <iostream>
using namespace std;
void degerArtir(int *ptr) {
(*ptr)++;
}
int main() {
int x = 10;
degerArtir(&x);
cout << "x'in yeni degeri: " << x << endl;
return 0;
}
Çıktı:
x'in yeni degeri: 11
📌 Fonksiyona değişkenin adresini gönderdiğimiz için değişkenin değeri değişir.
Özet
Konu | Açıklama |
---|---|
Pointer Tanımlama | int *ptr; |
Bellek Adresi Alma | &x |
Pointer ile Değer Erişme | *ptr |
Pointer ile Değer Değiştirme | *ptr = 20; |
Pointer ve Dizi | *(dizi + i) |
Pointer Aritmetiği | ptr++ , ptr + 1 |
Dinamik Bellek | new , delete |
Pointer ve Fonksiyon | Adres ile veri değiştirme |
Pointer’lar bellek yönetimi ve performans açısından çok güçlü bir yapıdır. C++’ta diziler, dinamik bellek yönetimi ve fonksiyonlarla birlikte sıkça kullanılır.
📌 Pointer’lar ile ilgili detaylı pratik yaparak konuyu daha iyi öğrenebilirsiniz. 🚀