C++ Pointer

 C++'da pointer (gösterici) konusu, bellek yönetimi ve veri yapıları gibi ileri seviye konuların temelidir. Şimdi sana sıfırdan başlayarak bol örnekle C++ pointer konusunu detaylıca anlatayım.


🔹 1. Pointer Nedir?

Pointer, bir değişkenin bellekteki adresini tutan değişkendir.

Örneğin:

int a = 10;
int* p = &a;
  • a bir tamsayı değişkenidir.

  • &a ifadesi, a değişkeninin bellek adresini verir.

  • p, bu adresi tutan bir pointer'dır.


🔸 2. Pointer Tanımlama

veri_tipi* pointer_adi;

Örnek:

int* p;   // int tipinde bir pointer
float* f; // float tipinde bir pointer
char* c;  // char tipinde bir pointer

🔹 3. Pointer ile Temel İşlemler

Örnek:

#include <iostream>
using namespace std;

int main() {
    int sayi = 42;
    int* ptr = &sayi;

    cout << "sayi: " << sayi << endl;
    cout << "sayi adresi: " << &sayi << endl;
    cout << "ptr içeriği (adres): " << ptr << endl;
    cout << "ptr'nin gösterdiği değer: " << *ptr << endl;

    return 0;
}

Çıktı:

sayi: 42
sayi adresi: 0x61ff08
ptr içeriği (adres): 0x61ff08
ptr'nin gösterdiği değer: 42

🔸 4. Pointer ile Değer Değiştirme

#include <iostream>
using namespace std;

int main() {
    int a = 5;
    int* p = &a;

    *p = 10; // a'nın değeri değişir

    cout << "a: " << a << endl;

    return 0;
}

📌 Çıktı:

a: 10
*p = 10; ile a değişkeninin değeri değiştirilmiş oldu.

🔹 5. Pointer ve Diziler

C++'ta dizi ismi aslında ilk elemanın adresidir. Bu yüzden pointer gibi kullanılabilir.

#include <iostream>
using namespace std;

int main() {
    int dizi[3] = {10, 20, 30};
    int* ptr = dizi;

    for (int i = 0; i < 3; i++) {
        cout << "dizi[" << i << "] = " << *(ptr + i) << endl;
    }

    return 0;
}

Çıktı:

dizi[0] = 10
dizi[1] = 20
dizi[2] = 30

🔸 6. Pointer ile Fonksiyonlara Değer Gönderme

Pointer ile fonksiyonlara referans gibi veri gönderip orijinal değeri değiştirebiliriz.

#include <iostream>
using namespace std;

void arttir(int* ptr) {
    (*ptr)++;
}

int main() {
    int x = 5;
    arttir(&x);
    cout << "x: " << x << endl;
    return 0;
}

📌 Çıktı:

x: 6
Fonksiyon, x'in adresini aldı ve orijinal değeri artırdı.

🔹 7. NULL Pointer

int* ptr = nullptr;

nullptr (veya eski yazım NULL) pointer'ın şu anda hiçbir adresi göstermediğini belirtir.


🔸 8. Pointer to Pointer (Çift Pointer)

Pointer’ların adresini tutan pointer’lar da olabilir. Yani: pointer to pointer

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int* p = &a;
    int** pp = &p;

    cout << "a: " << a << endl;
    cout << "*p: " << *p << endl;
    cout << "**pp: " << **pp << endl;

    return 0;
}

📌 Çıktı:

a: 10
*p: 10
**pp: 10

🔹 9. Dinamik Bellek ve new/delete

C++’ta new ile dinamik olarak bellekten yer ayırabiliriz ve delete ile serbest bırakırız.

#include <iostream>
using namespace std;

int main() {
    int* ptr = new int; // Bellekten int kadar yer ayır
    *ptr = 25;
    cout << "Değer: " << *ptr << endl;

    delete ptr; // Belleği geri ver
    return 0;
}

💡 Ekstra: Pointer ile Karakter Dizisi (C-String)

#include <iostream>
using namespace std;

int main() {
    char* isim = "Ali";
    cout << "İsim: " << isim << endl;
    return 0;
}

📌 Özet

Konu Açıklama
* Pointer tanımı veya pointer ile erişim
& Adres operatörü
int* p = &a; p, a'nın adresini tutar
*p p'nin gösterdiği değeri verir
nullptr Boş pointer değeri
new / delete Dinamik bellek yönetimi
*(ptr + i) Dizi elemanlarına pointer ile erişim


Yorumlar

Sitedeki popüler yayınlar:

Kullanım Alanlarına Göre Farklı Linux Dağıtımları 3

Kullanım Alanlarına Göre Farklı Linux Dağıtımları

Kullanım Alanlarına Göre Farklı Linux Dagıtımları 2