Merhaba ve tekrar hoş geldiniz. Sizin için başka bir meydan okumamız var.
Bu yarışmada, işaretçi aritmetiği hakkında her şeyi öğrenmenizi istiyorum.
Unutmayın, işaretçi aritmetiği gerçekten harika bir kavramdır.
Bu notasyonel bir kavram.
Ancak dizilerin işaretçilerle nasıl ilişkili olduğunu
gerçekten göstermektedir. Kod satırınızı azaltan çok basit bir
sözdizimiyle bir diziyi çok kolay bir şekilde geçebilirsiniz ve bu gerçekten
harika bir kavramdır.
Böylece işaretçi aritmetiği hakkında her şeyi öğreneceksiniz.
Ayrıca sabit değiştirici hakkında daha fazla bilgi edineceğiz.
Bu yüzden bu yarışmada, işaretçi aritmetiği ve const değiştiricisi
hakkındaki anlayışınızı test eden bir program yazmanızı istiyorum.
Bu kavramların her ikisini de önceki derslerde öğrenmiştik.
Bu yüzden sizden dizenin uzunluğunu hesaplayan bir fonksiyon yazmanızı istiyorum.
Gereklilikler, fonksiyonun parametre olarak sabit char işaretçisi almasıdır.
Sabit bir char işaretçi, işaretçinin işaret ettiği şeyin değerini
değiştiremeyeceğiniz anlamına gelir ve bunu uzunluk ile yapmayacaksınız.
İşlev, dizenin uzunluğunu yalnızca işaretçi aritmetiği kullanarak belirleyebilir.
Str uzunluk fonksiyonunu kullanmanızı istemiyorum. İşaretçi aritmetiği kullanmanızı istiyorum.
Ve bu işlevin uygulanmasını öngördüğüm şekilde,
işaretçinin sonunun adresini alacaksınız.
Bu, esasen işaretçinin uzunluğu olacaktır.
Ancak son dizenin adresini ve işaretçiyi almanın yolu bir while döngüsü
yazmaktır.
while döngüsü null sonlandırıcı karakterine kadar devam edebilir.
Ya da null sonlandırıcı karakter, hatırlayın,
int olarak temsil edilir.
Yani boş sonlandırıcı aslında bir sıfırdır. Böylece bir while döngüsü yazabilirsiniz
ve while döngüsünün koşuluna dahil etmesi gereken tek şey işaretçinin
referansını kaldırmaktır.
Çünkü d referans işaretçisinin değeri sıfırsa, döngüden atlayın ve
bu null sonlandırıcı olacaktır.
Bu yüzden tüm işaretçiyi gözden geçirmenizi
istiyorum.
Ve bunu yaparken, işaretçiyi
artırmaya devam edin.
Artık dizenin sonunu gösteren bir işaretçiniz var.
Sonra uzunluğu gerçekten hesaplamak için tek yapmanız
gereken iki işaretçiyi eksiltmektir.
Aktarılan işaretçi dizenin başlangıcıdır
ve ardından işlevde oluşturduğunuz
işaretçi dizenin sonunu gösterir.
Dize işaretçisinin sonunu dize noktasının başından çıkarırsanız,
dizenin uzunluğunu elde edersiniz.
Böylece, bitiş adresine ulaşmak için işaretçiyi birer birer
artırarak işaretçi aritmetiği yapacaksınız ve ardından her işaretçiyi
çıkarmak için nokta aritmetiğini kullanacaksınız.
Bu gerçekten de çıkarma işlemi için nokta aritmetiğini kullanmanın
en geçerli yoludur. Genellikle iki işaretçi eklemezsiniz
çünkü neden iki adres ekleyesiniz ki?
Bir dizide iki elemanın ne kadar uzakta olduğunu bulmak için iki adresi çıkarabilirsiniz,
bu mantıklı olacaktır, ancak toplama
işlemi mantıklı olmayacaktır. Tekrarlamak gerekirse, fonksiyon yalnızca nokta
aritmetiği kullanarak dizenin uzunluğunu belirleyebilir.
İşlevinizde yerel bir işaretçi oluşturun,
null sonlandırıcıyı görene kadar sona ulaşmak için her seferinde
bu işaretçiyi artırın, basit bir while döngüsü.
Ve sonra bitiş adresini aldıktan sonra, zaten başlangıç adresine sahipsiniz,
bu iki işaretçiyi çıkarın, bu size uzunluğu verecektir.
Bu uzunluğu fonksiyondan bir int olarak döndürmelisiniz.
Ve sonra sadece gerçek uzunluğun çıktısını alabilirsiniz.
Dolayısıyla, bu ödev sizi nokta aritmetiğine ve ayrıca sabit değiştiricinin
nasıl kullanılacağına alıştırıyor çünkü işaret ettiği gerçek değeri değiştirmek
ve iki işaretçiyi çıkarmak istemezsiniz
ve ayrıca null karakterini belirlemek için işaretçinin değerine bakabileceğiniz
bir while döngüsü kullanırsınız.
İyi şanslar.
Bir sonraki derste bir çözüm sunacağım. Teşekkür ederim.