BİLGİ SAYAMIYORUM beta

C++ ta "int*", "const int*", "const int * const", "int const *" ifadeleri nasıl okunur, ne anlama gelir ve aralarındaki fark nedir?

0

C++ ve C yazıyorsanız muhtemelen bildiğiniz üzere, bu dillerde verinin adresini belirten pointer (işaretçi) adındaki şeyler kullanılıyor. Bunlar fazlasıyla önemli object oriented (nesne bazlı) programlamadan geldiyseniz obje nerde ne işareti filan demeniz muhtemel. Ama alışmak zorundasınız, tüm işi bu çocuklar yapıyor. Sorun çıkan yer ise bu kimi zaten değişkenlerin, verilerin kendileri ile çakışabiliyor, nasıl tanımlandığınu/okunduğunu iyi alışmanız gerekiyor. Tabii ki zor, yıllarca uğraşanlar için de zor, yoksa şöyle ifadeleri anlaşılabilir ingilizceye çeviren bir çevirici olmazdı: cdecl Eğer detaylı bir anlatım isterseniz, şuraya da bakabilirsiniz: Clockwise/Spiral Rule Temel olarak ifadenin tersinden başlayarak öğeleri okumaya dayanıyor bu bilgiler, ancak türkçeye çevirdiğimizde tam tersi oluyor. 

     int* : işaret ediyor sayıyı yani sayıyı işaret eden işaretçi
     int const * : işaret ediyor sabit sayıyı yani sabit sayıyı işaret eden işaretçi (pointer)
     int * const : sayıyı işaret eden sabit işaretçi (constant)
     int const * const : sabit sayıyı işaret eden sabit işaretçi
     int ** : sayıyı işaret eden işaretçiyi işaret eden işaretçi
     int ** const : sayıyı işaret eden işaretçiyi işaret eden sabit işaretçi
     int * const * : sayıyı işaret eden sabit işaretçiyi işaret eden işaretçi
     int const ** : sabit sayıyı işaret eden işaretçiyi işaret eden işaretçi
     int * const * const : sayıyı işaret eden sabit işaretçiyi işaret eden sabit işaretçi

const (sabit) değiştirelemez veriyi gösterdiği için onun ne yaptığını anlamak çok önemli bu sebeple şöyle bir taktik kullanabilirsiniz: Elinizdeki ifadeyi yıldız (asterix) işaretinden ikiye bölün, const eğer sol tarafta ise işaretlenen veri için, sağ tarafta ise işaretçinin (pointer) kendisi içindir:

     const int* gosteren;
     int *const referans;

Bu örnekte "gosteren" sabit bir integer ı gösteren işaretçidir, neyi işaret ettiğiniz değiştirebilirsiniz ama sayıyı değil. "referans" ise sabit bir işaretçidir, kendisi değişemez ama sayı değişebilir. İlk const verinin istediğiniz tarafında olabilir; yani "const int *" ile "int const *" aynı anlama gelir ve "const int * const" ile "int const * const" de aynı anlama gelir.

BENZER 7

Kimse etkileşime girmemiş

ETİKETLER