1. Home
  2. Docs
  3. C++
  4. İşaretçiler
  5. İşaretçilerde Const Kullanımı

İşaretçilerde Const Kullanımı

İşaretçiler ile const kullanmadan önce kısaca const ne demek ondan bahsedelim.

Const, kısaca derleyiciye bir değişkenin değerinin değiştirilemeyeceğini bildirmemize yarar.

const int x=5;

Bu tanımlamada x’in değerinin 5 olduğunu ve değiştirilemeyeceğini anlarız.

Const tanımından biraz da olsa bahsettik. Sıra işaretçiler ile const tanımını nasıl kullanabiliriz ona bakalım. Öncelikle kullanım şekillerini 4 ana başlıkta toplayabiliriz. Bunlar;

  • Sabit olmayan veri için sabit olmayan işaretçi
  • Sabit olmayan veri için sabit olan işaretçi
  • Sabit olan veri için sabit olmayan işaretçi
  • Sabit olan veri için sabit işaretçi

Bu durumları bir fonksiyona parametre olarak gönderilen durumlar üzerinde inceleyeceğiz. Aslında tanımlarımıza göre fonksiyona yetkiler vereceğiz. Göndermiş olduğumuz adres üzerinde neler yapabilir? Adres de kayıtlı değeri değiştirebilir mi? Bir işaretçiye verdiğimiz adresi değiştirebilir mi? gibi sorulara cevap arayacağız.

C++ ile fonksiyon tanımları yaparken fonksiyonlara parametreler de gönderebiliyoruz. Böyle durumlarda prensip olarak fonksiyona, parametreler üzerinde en az yetkiyi vermek işleri daha güvenli hale getirir. Her zaman en az erişimi vermeye çalışın.

Şimdi bu başlıkları tek tek inceleyelim.

Sabit olmayan veri için sabit olmayan işaretçi

En fazla yetkinin olduğu durumdur. İşaretçi sayesinde değer değiştirilebilir veya işaretçi değiştirilebilir. Bu durumda const kullanımına rastlanılmaz.

Sabit olmayan veri için sabit olan işaretçi

Her zaman aynı hafıza alanını işaret eden bir işaretçi sayesinde hafıza alanında bulunan değer değiştirilebilir. Ancak const ile tanımlanan işaretçinin gösterdiği alan değiştirilemez.

int nonConstantVariable = 5, nonConstantVariable2 = 6;

int * const constantPtr = &nonConstantVariable;

*constantPtr = 10;

constantPtr = &nonConstantVariable2;

Burada 5. satırda adres üzerindeki değişkenin değerinin değiştirebiliyorken, 7. satırda işaretçiye yeni bir adres vermek istediğimizde hatayla karşılaşıyoruz.

Sabit olan veri için sabit olmayan işaretçi

İşaret ettiği adres üzerindeki değerin okunmasına izin verir ancak değiştirilmesine izin vermez ve isterse başka bir değere adreslenebilir.

void f(const int * nCPtr)
{
    *nCPtr = 100;
}

int main(int argc, const char** argv)
{
    int nonConstantVariable = 5;

    int * nonConstantPtr = &nonConstantVariable;

    f(nonConstantPtr);

    return 0;
}

Kodu derlemeye çalıştığımızda sabit değişkeni değiştirmeye çalıştığımız için const hatası aldığınızı görebilirsiniz.

Sabit olan veri için sabit işaretçi

Son olarak sabit olan veri için sabit işaretçiye geldik. İşaretçinin gösterdiği bellek adresi değiştirilemez. Aynı zamanda işaretçinin işaret ettiği bellek adresindeki değer de değiştirilemez.

const int *const constantPtr2 = &nonConstantVariable;

*constantPtr2 = nonConstantVariable2;
*constantPtr2 = &nonConstantVariable2;

Kodu derlediğimizde const hataları aldığımızı görebilirsiniz.

Bu yazıda işaretçilerin tanımlanma şekillerinden bahsettik. Yazmış olduğunuz projelerde işaretçileri ve işaretçilerin gösterdiği bellek bölgeleri üzerinde çalışırken ne gibi yetkilendirmeler yapabileceğimizi anlamış olduk. C++ gibi hataların zor keşfedileceği ve telafi edileceği bir dilde aslında bu konu oldukça önemli sayılabilir.

İşaretçilerle alakalı daha detaylı bilgiler öğrenmek için diğer yazıları takip edebilirsiniz.

Tags , , ,