Neler yeni
Metin2 Support

Metin2 Dünyasına Hoş Geldiniz! Yeni bir maceraya adım atın ve topluluğumuza katılın. Sorularınızı sormak, deneyimlerinizi paylaşmak ve diğer oyuncularla iletişim kurmak için hemen kaydolun. Kayıt olun, etkileşimde bulunun ve Metin2 dünyasındaki serüveninizi daha da özel hale getirin. Birlikte oynamak için sabırsızlanıyoruz!

Pointer Mantığı Rehberi

ciow3r

New member
Katılım
5 Haz 2025
Mesajlar
21
Tepkime puanı
10
Puanları
3

Pointer Mantığı Rehberi​

Pointer, özellikle C ve C++ öğrenen kişilerin ilk başta en çok zorlandığı konulardan biridir. Bunun temel nedeni pointer'ın yalnızca bir değişken değil, aynı zamanda bellekteki adreslerle çalışmayı sağlayan bir yapı olmasıdır.

Pointer konusunu anlamak için önce şu mantığı oturtmak gerekir:

Değişken = Değer tutar

Pointer = Bir değişkenin bellekteki adresini tutar


Pointer mantığını anladıktan sonra:

  • Diziler
  • Fonksiyonlar
  • Dinamik bellek
  • Struct
  • Class
  • Veri yapıları
gibi birçok konu çok daha anlaşılır hale gelir.

Pointer Nedir?​

Pointer, başka bir değişkenin bellekte bulunduğu adresi saklayan değişkendir.

Örneğin:

int sayi = 10;

Burada sayi değişkeninin değeri:

10

olur.

Ancak bu değişken bilgisayarın belleğinde belirli bir adreste tutulur.

Örneğin temsili olarak:

0x7FFE1234

gibi bir adresi olabilir.

Pointer ise bu adresi saklayabilir.

Basit Pointer Örneği​

int sayi = 10;
int *ptr = &sayi;

Burada:

sayi

10 değerini tutar.

&sayi

sayi değişkeninin bellekteki adresini verir.

ptr

bu adresi saklar.

C

& İşareti Ne Demektir?​

Pointer konusunda en önemli işaretlerden biri:

&

işaretidir.

Bir değişkenin önünde kullanıldığında onun bellek adresini verir.

Örneğin:

int sayi = 10;

printf("%p\n", (void *)&sayi);

ekrana değişkenin bellek adresini yazdırır.

Adres her çalıştırmada farklı olabilir.

Bu nedenle belirli bir adresi ezberlemeye gerek yoktur.

* İşareti Ne Demektir?​

Pointer konusunda ikinci önemli işaret:

*

işaretidir.

İki farklı kullanım şekli vardır.

Pointer Tanımlarken​

int *ptr;

burada ptr değişkeninin int türünde bir değerin adresini tutan pointer olduğunu belirtir.

Pointer'ın Gösterdiği Değere Ulaşırken​

*ptr

pointer'ın gösterdiği adresteki değeri verir.

Bu işleme:

Dereference

denir.

Örnek Üzerinden Anlayalım​

int sayi = 10;
int *ptr = &sayi;

Şimdi:

sayi

değeri:

10

olur.

ptr

sayi değişkeninin adresini tutar.

*ptr

ise o adresteki değeri verir.

Yani:

printf("%d\n", *ptr);

çıktısı:

10

olur.

Pointer Mantığını Ev Adresiyle Düşünelim​

Pointer'ı anlamanın en kolay yollarından biri adres örneğidir.

Diyelim ki bir evin içinde:

100 TL

var.

Evin kendisi:

Değişken

olsun.

Evin adresi:

Pointer'ın tuttuğu adres

olsun.

Adres üzerinden eve gittiğinizde içerideki:

100 TL

değerine ulaşırsınız.

Programlamada da benzer mantık vardır.

Bellek Adresi Nedir?​

Bilgisayarın RAM belleği çok sayıda küçük alanlardan oluşur.

Her alanın bir adresi vardır.

Programınız çalışırken değişkenler bu adreslerde tutulur.

Örneğin temsili olarak:

Adres Değer

0x1000 10
0x1004 25
0x1008 50

şeklinde düşünebilirsiniz.

Pointer:

0x1000

adresini tutabilir.

Bu adresin içindeki değer ise:

10

olabilir.

Pointer'ın Kendisi de Değişkendir​

Bu önemli bir konudur.

Pointer sadece adres değildir.

Pointer'ın kendisi de bellekte tutulan bir değişkendir.

Örneğin:

int sayi = 10;
int *ptr = &sayi;

temsili olarak:

sayi adresi: 0x1000
sayi değeri: 10

ptr adresi: 0x2000
ptr değeri: 0x1000

olabilir.

Yani pointer'ın kendi adresi de vardır.

Pointer ile Değer Değiştirme​

Pointer üzerinden bir değişkenin değeri değiştirilebilir.

Örneğin:

int sayi = 10;
int *ptr = &sayi;

*ptr = 50;

Artık:

sayi = 50

olur.

Çünkü ptr, sayi değişkenini göstermektedir.

Tam Örnek​

#include <stdio.h>

int main(void)
{
int sayi = 10;
int *ptr = &sayi;

printf("Sayi: %d\n", sayi);

*ptr = 50;

printf("Yeni sayi: %d\n", sayi);

return 0;
}

Çıktı:

Sayi: 10
Yeni sayi: 50

olur.

Pointer Neden Kullanılır?​

Pointer kullanımının birçok nedeni vardır.

En önemli kullanım alanları:

  • Fonksiyon içerisinde değişken değiştirmek
  • Dizilerle çalışmak
  • Dinamik bellek kullanmak
  • Büyük verileri kopyalamadan aktarmak
  • Veri yapıları oluşturmak
  • Sistem programlama
  • Donanım erişimi
olarak sıralanabilir.

Fonksiyonlarda Pointer Kullanımı​

C dilinde fonksiyona bir değişken gönderildiğinde genellikle değerin kopyası gönderilir.

Örneğin:

void degistir(int sayi)
{
sayi = 100;
}

Kullanım:

int x = 10;

degistir(x);

Fonksiyon içerisindeki değişiklik dışarıdaki x değişkenini değiştirmez.

Çünkü fonksiyon kopya değer üzerinde çalışır.

Pointer ile Fonksiyon İçinden Değer Değiştirme​

void degistir(int *sayi)
{
*sayi = 100;
}

Kullanımı:

int x = 10;

degistir(&x);

Artık:

x = 100

olur.

Çünkü fonksiyona x değişkeninin adresi gönderilmiştir.

Neden &x Gönderiyoruz?​

Fonksiyon:

void degistir(int *sayi)

bir adres bekler.

Bu nedenle:

degistir(&x);

kullanılır.

&x

x'in adresidir.

Fonksiyon bu adres üzerinden gerçek değişkene ulaşabilir.

scanf İçinde Pointer Mantığı​

C öğrenirken pointer'ı aslında çok erken kullanırsınız.

Örneğin:

int yas;

scanf("%d", &yas);

Burada scanf() fonksiyonu kullanıcının girdiği değeri yas değişkeninin içerisine yazmak zorundadır.

Bu nedenle ona:

yas'ın adresi

gönderilir.

Yani:

&yas

kullanılır.

Bu da pointer mantığının günlük kullanımına güzel bir örnektir.

Pointer Türü Neden Önemlidir?​

Pointer tanımlanırken hangi veri tipini göstereceği belirtilir.

Örneğin:

int *intPtr;
float *floatPtr;
char *charPtr;

Bu pointerlar farklı veri tiplerini gösterir.

Bunun nedeni pointer arithmetic ve dereference işlemlerinde compiler'ın verinin boyutunu bilmesi gerektiğidir.

int Pointer Örneği​

int sayi = 20;
int *ptr = &sayi;

ptr

bir int değişkenin adresini tutar.

char Pointer Örneği​

char harf = 'A';
char *ptr = &harf;

Bu pointer ise char türünde bir değişkeni gösterir.

Pointer ve Dizi İlişkisi​

Pointer konusunun en önemli bölümlerinden biridir.

C dilinde dizi adı birçok ifadede dizinin ilk elemanının adresine dönüşür.

Örneğin:

int sayilar[3] = {10, 20, 30};

şu kullanım:

sayilar

çoğu bağlamda:

&sayilar[0]

ile aynı adresi ifade eder.

Dizi Pointer Örneği​

int sayilar[3] = {10, 20, 30};

int *ptr = sayilar;

Artık:

*ptr

ilk elemanı verir.

Sonuç:

10

olur.

Pointer Arithmetic Nedir?​

Pointer üzerinde toplama ve çıkarma işlemleri yapılabilir.

Örneğin:

int sayilar[3] = {10, 20, 30};
int *ptr = sayilar;

şu ifade:

*(ptr + 1)

ikinci elemanı verir.

Sonuç:

20

olur.

ptr + 1 Gerçekten Bir Byte mı İlerler?​

Hayır.

Bu çok önemli bir noktadır.

Eğer:

int *ptr;

ise:

ptr + 1

bir sonraki int elemanına geçer.

Yani compiler sizeof(int) kadar ilerler.

Eğer int 4 byte ise pointer adresi 4 byte ilerleyebilir.

Bu nedenle pointer türü önemlidir.

Dizi Elemanlarına Pointer ile Ulaşma​

int sayilar[3] = {10, 20, 30};

printf("%d\n", *(sayilar + 0));
printf("%d\n", *(sayilar + 1));
printf("%d\n", *(sayilar + 2));

çıktı:

10
20
30

olur.

Bu nedenle şu iki kullanım birbiriyle yakından ilişkilidir:

sayilar[1]

ve:

*(sayilar + 1)

String ile Pointer İlişkisi​

C'de stringler karakter dizileridir.

Örneğin:

char isim[] = "Ahmet";

Pointer üzerinden de karakterlere ulaşabilirsiniz.

char *ptr = isim;

Şimdi:

*ptr

ilk karakteri verir:

A

String Literal Pointer​

Şu kullanım da görülebilir:

const char *mesaj = "Merhaba";

Burada pointer bir string literal'i gösterir.

String literal üzerinde doğrudan değişiklik yapmaya çalışmak güvenli değildir.

Bu nedenle const kullanımı önemlidir.

NULL Pointer Nedir?​

Henüz geçerli bir adres göstermeyen pointer için NULL kullanılabilir.

C:

int *ptr = NULL;

C++ tarafında modern kullanım:

int *ptr = nullptr;

şeklindedir.

NULL Pointer Neden Kullanılır?​

Pointer'ın henüz bir nesneyi veya değişkeni göstermediğini belirtir.

Örneğin:

if (ptr != NULL)
{
printf("%d\n", *ptr);
}

şeklinde kontrol yapılabilir.

NULL Pointer Dereference Edilirse Ne Olur?​

Şu kod tehlikelidir:

int *ptr = NULL;

printf("%d\n", *ptr);

Çünkü pointer geçerli bir adres göstermemektedir.

Program:

  • Çökebilir
  • Segmentation Fault verebilir
  • Access Violation oluşturabilir
Bu nedenle pointer kullanılmadan önce geçerli olup olmadığı kontrol edilmelidir.

Wild Pointer Nedir?​

Başlangıç değeri verilmemiş pointer'a bazen wild pointer denir.

Örneğin:

int *ptr;

Bu pointer belirsiz bir adres değeri taşıyabilir.

Sonra:

*ptr = 10;

yapmak ciddi hatalara neden olabilir.

Bu nedenle pointer başlangıçta:

int *ptr = NULL;

veya geçerli bir adresle başlatılmalıdır.

Dangling Pointer Nedir?​

Artık geçerli olmayan bir bellek alanını gösteren pointer'dır.

Örneğin dinamik bellek serbest bırakıldıktan sonra pointer hâlâ eski adresi tutabilir.

int *ptr = malloc(sizeof(int));

free(ptr);

Buradan sonra ptr artık geçerli belleği göstermeyebilir.

Daha güvenli kullanım:

free(ptr);
ptr = NULL;

şeklinde olabilir.

Dinamik Bellek Nedir?​

Program çalışırken ihtiyaç kadar bellek ayırma işlemidir.

C dilinde:

  • malloc
  • calloc
  • realloc
  • free
kullanılır.

Pointerlar dinamik bellek yönetiminin temelidir.

malloc Örneği​

#include <stdlib.h>

int *ptr = malloc(sizeof(int));

Bu kod bir int için bellekte alan ayırır.

Daha sonra:

*ptr = 25;

değeri yazılabilir.

İş bitince:

free(ptr);

kullanılmalıdır.

malloc Sonucu Kontrol Edilmeli mi?​

Evet.

Bellek ayırma başarısız olabilir.

Örneğin:

int *ptr = malloc(sizeof(int));

if (ptr == NULL)
{
return 1;
}

şeklinde kontrol yapılabilir.

Birden Fazla Eleman İçin Bellek Ayırma​

Örneğin 10 adet int:

int *sayilar = malloc(10 * sizeof(int));

Bu alan dizi gibi kullanılabilir.

sayilar[0] = 10;
sayilar[1] = 20;

İşiniz bitince:

free(sayilar);

kullanılmalıdır.

Memory Leak Nedir?​

Dinamik olarak ayrılan belleğin serbest bırakılmamasıdır.

Örneğin:

int *ptr = malloc(1000 * sizeof(int));

ancak:

free(ptr);

kullanılmazsa program belleği gereksiz yere tutabilir.

Bu durum sürekli tekrarlandığında:

Memory Leak

oluşur.

Pointer to Pointer Nedir?​

Bir pointer'ın adresini tutan pointer'dır.

Örneğin:

int sayi = 10;
int *ptr = &sayi;
int **ptr2 = &ptr;

Burada:

ptr

sayi'nın adresini tutar.

ptr2

ise ptr'nin adresini tutar.

Pointer to Pointer Nasıl Okunur?​

int **ptr2;

ifadesi:

int pointer'ını gösteren pointer

olarak düşünülebilir.

Şu kullanım:

**ptr2

son değere ulaşır.

Bu örnekte:

10

sonucunu verir.

3124688 400a 4

Pointer to Pointer Nerede Kullanılır?​

Örneğin:

  • Dinamik iki boyutlu diziler
  • Fonksiyon içinde pointer değiştirmek
  • Argüman listeleri
  • Bazı veri yapıları
gibi alanlarda kullanılabilir.

Başlangıçta yalnızca mantığını anlamak yeterlidir.

void Pointer Nedir?​

void *

belirli bir veri tipine bağlı olmayan genel pointer türüdür.

Örneğin:

void *ptr;

farklı türde adresleri tutabilir.

malloc() fonksiyonunun dönüş değeri de C'de void * türündedir.

Ancak kullanmadan önce doğru tipe göre işlem yapılmalıdır.

C++'ta Pointer Mantığı Aynı mı?​

Temel pointer mantığı büyük ölçüde aynıdır.

Örneğin:

int sayi = 10;
int *ptr = &sayi;

C++'ta da çalışır.

Ancak modern C++ ek olarak:

  • Reference
  • std::unique_ptr
  • std::shared_ptr
  • std::vector
  • std::string
gibi daha güvenli araçlar sunar.

C++ Reference ile Pointer Farkı​

Reference örneği:

int sayi = 10;
int &ref = sayi;

Pointer:

int *ptr = &sayi;

Reference genellikle mevcut bir nesneye alternatif isim gibi davranır.

Pointer ise adres tutar ve:

  • nullptr olabilir.
  • Başka bir adresi gösterebilir.
  • Pointer arithmetic yapılabilir.
Bu nedenle aynı şey değildir.

Smart Pointer Nedir?​

Modern C++ içerisinde dinamik belleği daha güvenli yönetmek için smart pointerlar bulunur.

Örneğin:

#include <memory>

auto sayi = std::make_unique<int>(10);

İş bittiğinde bellek otomatik olarak temizlenir.

Özellikle modern C++ projelerinde manuel:

new
delete

kullanımını azaltmaya yardımcı olur.

Pointer ile Struct Kullanımı​

C'de çok sık görülür.

Örneğin:

struct Oyuncu
{
int can;
int seviye;
};

Pointer:

struct Oyuncu oyuncu;

struct Oyuncu *ptr = &oyuncu;

Değere ulaşmak için:

(*ptr).can = 100;

yazılabilir.

Ancak daha kısa kullanım:

ptr->can = 100;

şeklindedir.

-> Operatörü Nedir?​

Pointer üzerinden struct veya C++ object üyesine erişmek için kullanılır.

Örneğin:

ptr->can

şunun kısa halidir:

(*ptr).can

Özellikle veri yapılarında çok sık karşınıza çıkar.

Linked List ve Pointer​

Pointer mantığını öğrendikten sonra linked list gibi veri yapıları daha anlaşılır hale gelir.

Örneğin:

struct Node
{
int veri;
struct Node *sonraki;
};

Her node:

  • Bir veri
  • Sonraki node'un adresi
tutar.

Bu yapı tamamen pointer mantığı üzerine kuruludur.

Pointer Boyutu Ne Kadardır?​

Pointer'ın boyutu gösterdiği veri tipinden bağımsız olarak büyük ölçüde sistem mimarisine bağlıdır.

Örneğin 64 bit sistemde çoğu pointer:

8 byte

olabilir.

Şu pointerların boyutu çoğu platformda aynı olabilir:

int *a;
char *b;
double *c;

Ancak gösterdikleri veri türleri farklıdır.

Kesin boyut için:

sizeof(ptr)

kullanılmalıdır.

Pointer ile Adres Yazdırma​

C'de adres yazdırırken:

printf("%p\n", (void *)ptr);

kullanılabilir.

%p

pointer adreslerini yazdırmak için kullanılır.

&ptr Ne Demektir?​

Şunu düşünelim:

int sayi = 10;
int *ptr = &sayi;

Burada:

ptr

sayi'nın adresini tutar.

&ptr

ise pointer değişkeninin kendi adresini verir.

Bu ikisini karıştırmamak önemlidir.

ptr ile *ptr Farkı​

Çok önemlidir.

ptr

adres değeridir.

*ptr

o adresteki gerçek değerdir.

Örneğin temsili:

ptr = 0x1000

*ptr = 10

şeklinde düşünülebilir.

&sayi ile ptr Farkı​

Şu kod varsa:

int sayi = 10;
int *ptr = &sayi;

şu iki değer aynıdır:

&sayi

ve:

ptr

Çünkü ptr zaten sayi'nın adresini tutmaktadır.

*ptr ile sayi Farkı​

Aynı örnekte:

*ptr

ve:

sayi

aynı değeri verir.

İkisi de:

10

olur.

Pointer Kullanırken En Tehlikeli Hatalar​

Pointerlar güçlüdür ancak yanlış kullanıldığında ciddi hatalara neden olabilir.

En yaygın sorunlar:

  • NULL pointer
  • Dangling pointer
  • Wild pointer
  • Dizi sınırını aşmak
  • free sonrası pointer kullanmak
  • Aynı belleği iki kez free etmek
  • Yanlış pointer arithmetic
olarak sıralanabilir.

Double Free Nedir?​

Aynı dinamik belleği iki kez serbest bırakmaya çalışmaktır.

Yanlış:

free(ptr);
free(ptr);

Bu tanımsız davranışa neden olabilir.

Daha güvenli yaklaşım:

free(ptr);
ptr = NULL;

şeklindedir.

free(NULL) güvenlidir.

Use After Free Nedir?​

Bellek serbest bırakıldıktan sonra tekrar kullanılmasıdır.

Yanlış:

int *ptr = malloc(sizeof(int));

*ptr = 10;

free(ptr);

printf("%d\n", *ptr);

Son satır artık güvenli değildir.

Bu tür hatalar özellikle büyük C/C++ projelerinde ciddi problemlere yol açabilir.

Pointer ile Dizi Sınırını Aşmak​

Örneğin:

int sayilar[3] = {10, 20, 30};
int *ptr = sayilar;

şu erişimler geçerlidir:

*(ptr + 0)
*(ptr + 1)
*(ptr + 2)

Ancak:

*(ptr + 10)

geçerli dizi alanının dışına çıkabilir.

C sizi her zaman otomatik olarak durdurmaz.

Segmentation Fault Nedir?​

Programın erişmemesi gereken bir bellek alanına erişmesi sonucunda ortaya çıkabilir.

Örneğin:

  • NULL pointer dereference
  • Geçersiz pointer
  • Dizi sınırı dışına çıkma
  • Serbest bırakılmış belleği kullanma
gibi nedenlerden oluşabilir.

Windows tarafında benzer hata:

Access Violation

olarak görülebilir.

Pointer Öğrenirken Ezber Yapmayın​

Pointer'ı şu şekilde ezberlemeye çalışmak:

& = şu
* = bu

tek başına yeterli değildir.

Her kodu şu sorularla okuyun:

  1. Hangi değişken değer tutuyor?
  2. Hangi pointer adres tutuyor?
  3. Pointer nereyi gösteriyor?
  4. Dereference edilince hangi değere ulaşılıyor?
Bu dört soruyu cevaplayabiliyorsanız pointer mantığı oturmaya başlamıştır.

Pointer Öğrenmek İçin Basit Egzersiz​

Önce şu kodu yazın:

int sayi = 25;
int *ptr = &sayi;

Daha sonra şunları ekrana yazdırın:

  • sayi
  • &sayi
  • ptr
  • *ptr
  • &ptr
Böylece değer ve adres farkını görürsünüz.

İkinci Egzersiz​

Pointer kullanarak iki sayının değerini değiştiren bir fonksiyon yazın.

Örneğin:

void swap(int *a, int *b)
{
int gecici = *a;

*a = *b;
*b = gecici;
}

Kullanımı:

int x = 10;
int y = 20;

swap(&x, &y);

Sonuç:

x = 20
y = 10

olur.

Bu pointer öğrenmek için en iyi başlangıç egzersizlerinden biridir.

Üçüncü Egzersiz​

Bir diziyi pointer ile dolaşın.

int sayilar[] = {10, 20, 30, 40, 50};

int *ptr = sayilar;

for (int i = 0; i < 5; i++)
{
printf("%d\n", *(ptr + i));
}

Bu örnek pointer ve dizi ilişkisini anlamanızı sağlar.

Pointer Öğrenme Sırası​

Pointer konusunu şu sırayla çalışabilirsiniz:

  1. Bellek adresi nedir?
  2. & operatörü
  3. Pointer değişkeni
  4. * dereference
  5. Pointer ile değer değiştirme
  6. Fonksiyona pointer gönderme
  7. Dizi ve pointer
  8. Pointer arithmetic
  9. NULL pointer
  10. Struct pointer
  11. Dinamik bellek
  12. Pointer to pointer
Bu sırayla ilerlemek konuyu çok daha anlaşılır hale getirir.

Yeni Başlayanların Yaptığı Yaygın Hatalar​

& ve * İşaretlerini Karıştırmak​

&

adres alır.

*

pointer'ın gösterdiği değere erişebilir.

Pointer'a Normal Değer Atamak​

Yanlış:

int *ptr = 10;

Bu 10 sayısını normal değişken gibi pointer'a vermek anlamına gelmez.

Pointer geçerli bir adres göstermelidir.

Pointer Başlatmadan Kullanmak​

int *ptr;

*ptr = 50;

tehlikelidir.

NULL Pointer Dereference Etmek​

int *ptr = NULL;

*ptr = 10;

hatalıdır.

free Sonrası Kullanmaya Devam Etmek​

Serbest bırakılan bellek tekrar kullanılmamalıdır.

Dizi Sınırını Aşmak​

Pointer kullanıyor olmak sınırları ortadan kaldırmaz.

Pointer Kullanmak Her Zaman Gerekli mi?​

Hayır.

Özellikle modern C++ içerisinde birçok işlem:

  • std::vector
  • std::string
  • Reference
  • Smart Pointer
ile daha güvenli yapılabilir.

Ancak pointer mantığını anlamak yine de çok önemlidir.

Çünkü altında yatan bellek ve adres mantığını anlamanızı sağlar.

C#'ta Pointer Var mı?​

C# içerisinde pointer desteği vardır ancak normal uygulamalarda genellikle kullanılmaz.

Pointer kullanımı için çoğu durumda:

unsafe

kod gerekir.

C# otomatik bellek yönetimi yaptığı için günlük C# geliştirmenin büyük bölümünde klasik pointer kullanmanız gerekmez.

Ancak C ve C++ için pointer temel konulardan biridir.

Pointer Öğrenmek Neden Önemli?​

Pointer öğrenmek yalnızca * ve & yazmayı öğrenmek değildir.

Aynı zamanda şu soruları anlamanıza yardımcı olur:

  • Değişken RAM'de nasıl tutulur?
  • Fonksiyonlar veriyi nasıl alır?
  • Diziler bellekte nasıl yerleşir?
  • Dinamik bellek nasıl çalışır?
  • Veri yapıları nasıl birbirine bağlanır?
Bu nedenle pointer, C ve C++ öğrenirken en öğretici konulardan biridir.

Pointer Kontrol Listesi​

  • Bellek adresinin ne olduğunu biliyor muyum?
  • & operatörünün ne yaptığını biliyor muyum?
  • Pointer değişkeni oluşturabiliyor muyum?
  • *ptr ifadesini anlayabiliyor muyum?
  • ptr ile *ptr farkını biliyor muyum?
  • ptr ile &ptr farkını biliyor muyum?
  • Fonksiyona adres gönderebiliyor muyum?
  • Pointer ile değişken değerini değiştirebiliyor muyum?
  • Dizi ile pointer ilişkisini biliyor muyum?
  • Pointer arithmetic mantığını biliyor muyum?
  • NULL pointer nedir biliyor muyum?
  • Dangling pointer nedir biliyor muyum?
  • malloc ve free mantığını biliyor muyum?
  • Struct pointer ile -> kullanabiliyor muyum?
  • Pointer to pointer mantığını anlayabiliyor muyum?

Sonuç​

Pointer, başka bir değişkenin bellek adresini tutan değişkendir.

En temel pointer örneği:

int sayi = 10;
int *ptr = &sayi;

şeklindedir.

Burada:

sayi

değeri tutar.

&sayi

değişkenin adresidir.

ptr

bu adresi tutar.

*ptr

ise o adresteki gerçek değere ulaşır.

Pointer konusunu öğrenirken en önemli üç kavram:

Adres → Pointer → Dereference

şeklindedir.

Öncelikle normal değişken ve bellek adresini anlayın. Daha sonra pointer ile değişkene erişmeyi, fonksiyonlara adres göndermeyi ve dizilerle pointer kullanımını öğrenin.

Ardından:

NULL pointer → Struct pointer → Dinamik bellek → Pointer to pointer

konularına geçebilirsiniz.

Pointer ilk bakışta karmaşık görünebilir ancak adres ve değer farkı anlaşıldığında konu büyük ölçüde çözülür.

Kısacası:

Değişken değeri saklar, pointer ise o değerin bellekte nerede bulunduğunu saklar.
 

Konuyu görüntüleyenler

  • Üst