C++ Pointer (İşaretçiler) Rehberi

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.

İşlemAçıklama
ptr + 1Bir sonraki elemana gider
ptr - 1Bir ö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

KonuAçıklama
Pointer Tanımlamaint *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ğiptr++, ptr + 1
Dinamik Belleknew, delete
Pointer ve FonksiyonAdres 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. 🚀

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir