Merhaba, tekrar hoş geldiniz.
Bu derste, const değiştiricisi ve onu işaretçilerle nasıl kullandığımız
hakkında konuşmak istiyorum.
Önceki derslerde sürekli olarak öğrendik.
Bu sadece bir değişkenin değerini değiştiremeyeceğiniz anlamına gelir. Ancak bunu bir işaretçiye uyguladığımızda ne anlama geliyor?
Dolayısıyla, bir değişken veya dizide const değiştiricisini kullandığımızda,
derleyiciye değişken dizisinin içeriğinin program tarafından değiştirilmeyeceğini söyler.
Alternatif, önişlemci tarafından define deyimleri oluşturmaktı, ancak
const genellikle bunu yapmak için daha verimli daha iyi bir yoldur.
İşaretçilerle, const değiştiricisini kullanırken iki şeyi göz önünde bulundurmamız gerekir.
Aslında işaretçinin değiştirilemeyeceğini mi söylüyoruz?
Yoksa işaretçinin gösterdiği değerin değiştirilemeyeceğini mi söylüyoruz?
Çünkü bir işaretçinin bir adres değeri içerdiğini unutmayın.
Ve bu adresi asla değiştirmek istemeyebiliriz.
Ya da noktanın işaret ettiği değeri değiştirmek istemeyebiliriz.
Her iki durumda da, söz dizimimizde spesifik olmalıyız.
Bu nedenle, işaret edilen değerin değiştirilmemesi gerektiğini belirtmek için bir işaretçi bildirirken const
anahtar sözcüğünü kullanabilirsiniz.
Bunu sağlama şekliniz ve yine bir değerin bir adresi
olduğu için işaretçinin bir değer olması.
İşaret ettiği şey o adresin değeridir.
Bunun değişmemesini istiyorsanız, şöyle
bir şey yaparsınız.
İşaretçiyi bildirdiğinizde yıldız işaretini türden önce sabit değiştiriciye
koyacağınızı söylersiniz.
Yani işaretçinizin türü ne olursa olsun sabit diyebilirsiniz.
Yani bu aslında bir sabite işaretçi tanımlamanın deforme
edilmiş halidir.
999l'i değiştiremeyeceğiz.
Böylece pvalue tarafından işaret edilen değerin sabit olduğunu beyan ederiz.
Derleyici, pvalue tarafından işaret edilen değeri değiştirmeye çalışan tüm deyimleri kontrol edecektir.
Ve eğer programda bunu yapan bir arkadaş varsa, hata verecektir.
Yani söz dizimi bu. Burada dikkat etmeniz gereken
şey, const kelimesinin ilk kelime olması
ve yazıdan önce gelmesidir. Yani bu, işaret edilen değerin değişemeyeceğini
söylüyor.
Yani pvalue üzerinde böyle bir şey yapmaya çalışırsanız, işaret edilen
şeye bir değer atamayı denersiniz çünkü orada dolaylama operatörünü
görürsünüz. Bu, işaret ettiğimiz şeye bir değer
atadığımız anlamına gelir. Bunu yapmaya çalışırsak,
hata verecektir çünkü bu değeri değiştiremeyiz,
999l'yi 888l olarak değiştiremeyiz.
Peki şimdi sabitlere işaretçiler ne olacak?
Ve önceki bildirimde, noktanın işaret
ettiği işaretçinin değişemeyeceğini yarattık.
Ancak yine de bildirdiğimiz değişkenin gerçek değerini değiştirebiliriz.
Böylece uzun değeri değiştirmeye devam edebiliriz.
Yıldız p-değerini değiştiremeyiz.
Ancak uzun değer bir sabit olarak tanımlanmaz, sadece uzun değer olarak tanımlanır.
Dolayısıyla, sabit uygulanmadığı için tamsayı işaretçisinin
değerini değiştirebiliriz.
Sadece işaretçiye sabit uyguladık. Yani değerin 777l'ye eşit olduğunu söyleyebiliriz.
İşaret edilen değer değişti, ancak değişikliği yapmak için işaretçiyi kullanmadınız.
İşaretçinin kendisi de bir sabit değildir.
Hatırlanan işaretçi bir adres içerir.
İşaretçiyi sabit olarak bildirmedik. Yani bunu da değiştirebiliriz.
İşaretçinin sabit olması için neyi işaret ettiğini belirleriz. Eğer sayı adında yeni bir değişken tanımlarsak, p-değeri
bu sayının adresine eşittir diyebiliriz.
Bu gayet iyi çünkü işaretçinin değerinin adresini değiştiriyoruz.
İşaretçinin işaret ettiği şeyin değerini değiştirmiyoruz.
Bu yüzden bu ayrımı anlayın, ya sadece bir adres
olan işaretçinin değerini değiştirin
ya da işaretçinin işaret ettiği şeyi değiştirin.
İşaretçinin işaret ettiği şeyi değiştirmek
istemiyorsanız, const işaretçinin bildirimindeki ilk anahtar sözcük olmalıdır.
Yine bu örnekte, p-değerinde saklanan adresi bir sayıya işaret edecek şekilde değiştireceğiz.
Saklanan değeri değiştirmek için hala işaretçiyi kullanamayız çünkü bu değeri
değiştiremeyeceğimiz bildirilmiştir.
Tıpkı bizim yaptığımız gibi, işaretçide saklanan adresi istediğiniz kadar değiştirebilirsiniz.
İşaretçide saklanan adresi değiştirdikten sonra bile işaretçinin işaret
ettiği değeri değiştirmek için kullanılmasına izin verilmez.
Bu nedenle, uzun sayı olarak değiştirmiş
olsak da, işaretçi hala anahtar kelime olarak sabitti.
Dolayısıyla, işaretçi neyi gösteriyor olursa olsun değeri değiştiremeyiz.
İşaretçinin adresinin, yani işaretçideki değerin
değişmesine izin vermemeye ne dersiniz?
Bu nedenle, işaretçide saklanan adresin değiştirilemeyeceğinden de emin olmak isteyebilirsiniz.
Bunu, işaretçinin bildiriminde constant anahtar sözcüğünü aynı
şekilde kullanarak yapabilirsiniz, ancak bu biraz farklıdır.
İlk anahtar sözcük olarak const yerine, veri türünden
sonra ve yıldız işaretinden sonra koyarsınız.
Bu, işaretçinin kendisinin değerini değiştiremeyeceğini söyler.
Eğer int'ten önce koyarsanız, işaretçinin işaret ettiği değerin değişemeyeceğini söylemiş olursunuz.
Yani bunu yaptığınızda, işaretçinin her zaman aynı şeyi göstermesini sağlar.
Adres asla değişmeyecektir.
Derleyici, kodunuzda başka bir yerde
işaretçiyi değiştirme girişiminde bulunmadığınızı kontrol edecektir.
Bu adresi değiştiremezsiniz.
Yani p count equals and item demeye çalışırsanız hata alırsınız.
Çünkü bu sadece sayım adresine işaret edebilir.
Tüm mesele, değiştirmek istiyorsanız sabit anahtar kelimeyi nereye yerleştirdiğinizle ilgilidir.
İşaretçiye giden işaretçinin değişmesine izin vermek istemiyorsanız veya
işaretçinin adresinin değişmesine izin vermiyorsanız.
İlk anahtar sözcük olarak sabit, işaretçilerin gösterdiği değerin değiştirilmesine izin vermez.
Yıldızdaki veri türünden sonra sabit koyarsanız, bu işaretçi
adresinin değişemeyeceğini söyler.
Bu çok fazla ve çok kafa karıştırıcı, bu yüzden az önce söylediklerime çalışın.
Bu sözdizimini anlayın, çok önemli
ve çok zor. Bu hatayı yapmak çok kolay
olabilir. Bu yüzden aradaki farkı anlayın.
Bir öncekinde olduğu gibi, p
count'un işaret ettiği değeri p count'u kullanarak değiştirebilirsiniz. Çünkü p sayısı, yeni bir adres atayamasak da,
işaret ettiği değeri değiştirebileceğimiz
anlamına gelir.
Böylece referansı kaldırabilir ve bu şekilde değiştirebiliriz. Yıldız p sayısının 345'e eşit olduğunu söyleyebiliriz, sorun değil.
İşaretçi aracılığıyla count içinde saklanan değere başvurur ve değeri 345 olarak değiştirir.
Aynı zamanda sabit olan bir değere işaret eden sabit bir işaretçi oluşturabilirsiniz,
böylece şöyle bir şey yapabilirsiniz: constant in star, constant
p item.
Bu da değerin işaret ettiği şeyin sabit olduğunu ve işaretçinin
kendisinin de bir sabit olduğunu söyler.
Yani p öğesi bir sabite sabit bir işaretçidir, böylece her şey sabittir.
p öğesinde saklanan adresi değiştiremezsiniz ve işaret ettiği şeyi
değiştirmek için p öğesini kullanamazsınız.
Ancak, yine de öğeyi değiştirebilirsiniz.
Öğe sabit değildir, bu nedenle öğeyi değiştirebilirsiniz.
Değeri doğrudan değiştirebilirsiniz.
Hiçbir şeyin değişmediğinden emin olmak istiyorsanız, item
int değişkenini de bir sabit olarak oluşturmanız gerekir.
O zaman da bu durum asla değişmeyecek demektir.
Ancak burada sabit işaretçiler ile işaretçinin
işaret ettiği sabit değerler arasındaki farkı unutmayın.
İkisini de kullanabilirsiniz. Birini ya da diğerini kullanabilirsiniz.
Her şeyin sabit olduğundan emin
olmak istiyorsanız, o değişkene işaret ettiğiniz şeyin de sabit olduğundan emin olun. Teşekkür ederim.