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;
ilea
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
Yorum Gönder