Merhaba, tekrar hoş geldiniz.
Bu derste, işaretçiler ve diziler arasındaki ilişkiden bahsetmek istiyorum.
Güçlü bir ilişki vardır ve işaretçi aritmetiği hakkında konuşmadan önce
bu ilişkiyi anlamamız gerekir. Öyleyse başlayalım.
Dizi, tek bir ad kullanarak başvurabileceğiniz
aynı türden nesnelerin bir koleksiyonudur. Şimdiye kadar diziler konusunda oldukça iyi olduğumuzu biliyoruz.
Karakter dizisini birkaç bölümdür kullanıyoruz.
Bu parantezlerin içinde bir dizin veya alt simge kullanarak
erişebileceğiniz bir dizidir. Bunu hatırlıyoruz.
Dizilerin sıfır tabanlı olduğunu ve sıfırdan başladığını biliyoruz.
Ancak yine de, bu sadece aynı değişken adıyla birden fazla ayı tutmanın bir yoludur.
İşaretçi, değeri, değeri olarak bir bellek adresi olan bir değişkendir ve
belirli bir türdeki
başka bir değişkene veya sabite referans verebilir.
Ayrıca bu noktada bir işaretçinin ne olduğu konusunda da oldukça net olmalıyız.
Sadece bir bellek adresi tutar.
Farklı zamanlarda farklı değişkenlerin adresini tutmak için bir işaretçi kullanabilirsiniz.
Ama aynı tipte olmak zorundasınız. Bir int işaretçisi, bir int türünün
adresini geri yüklemek için işaret etmelidir.
Diziler ve işaretçiler oldukça farklı görünse de birbirleriyle
çok yakından ilişkilidirler ve bazen, özellikle karakter dizilerinde birbirlerinin yerine
kullanılabilirler.
Aslında bir karakter dizisi olan bir hatırlama karakteri oluşturabilir
ve temelde aynı şey olan bir karakter işaretçisi oluşturabilirsiniz.
Bellek ayırıp ayırmamanız ve bir karakter
işaretçisi ile serbest bırakmanız arasında sadece küçük farklılıklar vardır.
Bir karakter dizisi ile bunu yapmak zorunda değilsiniz,
ancak bir karakter a da sabit boyuttadır.
Yani boyutu 20 olan bir karakter dizisi oluşturursanız,
yalnızca 19 karakter saklayabilirsiniz.
Karakter işaretçisi ile dinamik bellek yönetimini kullanabilir
ve boyutun artmasını veya azalmasını sağlayabilirsiniz, bellekle
ilgili daha verimli olabilir.
Ancak c'de işaretçilerin en yaygın kullanımlarından biri dizilere işaretçi olarak kullanılmasıdır.
Bu, özellikle karakterler için işaretçileri
en sık kullandığınız zamandır.
Karakter işaretçisi bir karakter dizisi ile aynıdır.
Silmek için işaretçi kullanmanın ana nedenleri,
gösterimsel kolaylık ve program verimliliğidir.
Dolayısıyla, dinamik bellek yönetiminden bahsetmediğiniz sürece birçok durumda
dizi ya da işaretçiden birini kullanabilirsiniz.
Ama çoğu durumda yapabilirsiniz. Aradaki tek fark sözdizimi ve
notasyondur.
Bir öğeye erişmek için bir alt simge kullanıp kullanmamanız ya da nokta
aritmetiği kullanıp kullanmamanız, karakter
işaretçisini o öğenin belirli adresine işaret etmek için kullanıp kullanmamanızdır.
Ayrıca karakter işaretçilerini kullanmak da daha verimlidir.
Dizilere işaretçiler genellikle daha az bellek kullanan ve daha hızlı çalışan kodla sonuçlanır.
Bu nedenle, mümkün olduğunca karakterler için bir işaretçi ve diğer
veri türleri için de bir işaretçi kullanmak istersiniz.
Çünkü daha hızlıdır ve daha az bellek kullanır. İşaretçiler çoğunlukla diziler üzerinde.
Eğer 100 tamsayıdan oluşan bir diziniz varsa, bunun ne anlama
geldiğini biliyoruz, sadece int değerinin 100 olduğunu söylersiniz. 100 boyutudur.
Bu, bu dizide 100 tamsayı saklayabileceğiniz anlamına gelir.
Ayrıca bir işaretçi de tanımlayabilirsiniz. Buna values pointer adını vereceğiz
çünkü values dizisine işaret ediyor
ve bu dizide bulunan tamsayılara erişmek için kullanılabilir.
Bu yüzden sadece instar değerleri işaretçisi diyoruz. Bu noktada bir işaretçiyi nasıl bildireceğimizi biliyoruz.
Dizinin elemanlarını işaret etmek için kullanılan bir işaretçi tanımladığınızda,
işaretçiyi dizinin tip işaretçisi olarak belirtmezsiniz.
Bu noktaya kadar duyduğumuz tek şey pointer to end, pointer
to double idi.
Ancak dizileri kullanırken sivri dizi demezsiniz.
Bu gerçek işaretçi, dizide bulunan belirli bir öğeye işaret etmektedir.
Bunu aklınızda tutun. Değerlerin adresi ile bir işaretçiyi
temizlediğinizde aslında tüm dizi değildir.
Bu nedenle, values işaretçisini values dizisinin ilk öğesini gösterecek şekilde ayarlamak için
tek yapmanız gereken values point veya equals values demek.
Adresi ya da başka bir şeyi oraya yazmak zorunda değilsiniz. Çünkü değerler
dizisi bir işaretçidir.
Kafanızda canlandırmanız gereken şey, tüm bu dizilerin
kaputun altındaki işaretçiler olduğudur.
Dolayısıyla, bir dizinin ilk elemanını bir
işaretçiye atamak istiyorsanız, tek yapmanız gereken eşittir işlecinin sağ tarafında
diziyi belirtmek ve sol tarafta sadece
değer işaretçisine sahip olmaktır.
Bu, dizideki ilk adrese veya ilk öğeye işaret edecektir.
Adres operatörü kullanılmaz, buna dikkat edin.
C derleyicisi, bir dizi adının alt simge olmadan görünmesini
diziye bir işaretçi olarak ele alır.
Dolayısıyla, değerlerin alt simge olmadan belirtilmesi, değerlerin
ilk öğesine bir işaretçi üretme etkisine sahiptir.
Bunun anlamı, artık bir sonraki adrese gitmek için işaretçiyi
artırarak dizideki sonraki değerlere işaret edebileceğinizdir.
Ve önümüzdeki birkaç derste nokta aritmetiği hakkında konuşurken bundan bahsedeceğiz.
Ve bu gerçekten sadece bir notasyon meselesi ve aynı zamanda bir verimlilik meselesi.
Dolayısıyla, değerlerin başlangıcına bir işaretçi üretmenin eşdeğer
bir yolu da sağdaki ilk öğeye adres operatörünü uygulamaktır.
Yani bunu iki şekilde yapabilirsiniz, her iki yol da iyidir.
Ama bunu da yapabilirsiniz. Sıfırın altındaki değerlerin işaretçi adresi diyebilirsiniz.
Bu, değer işaretçisini dizideki ilk öğeye ayarlayacaktır.
Yani bunu kullanabilir ya da sadece değer noktası eşittir değer diyebilirsiniz.
Açıkçası, ve işareti ve alt simge olmadan,
biraz daha az kod veya yazması daha kolaydır.
Bu biraz daha açık olabilir çünkü bildirime
bakmadığınız sürece values'in bir dizi olduğunu bilmeniz gerekmez.
Ama yine de, her iki yol da iyidir. Değerler işaretçisi değerlere eşittir veya değerler
işaretçisi sıfırın altındaki değerin adresine eşittir.
Bu bir programcı tercihi meselesidir. Ve yine, bu bir notasyon meselesi.
Tekrarlamak
gerekirse, ar sub-i ve asterisk
ar plus i ifadeleri anlam olarak eşdeğerdir.
Bu yüzden bunu anladığınızdan emin olmak istiyoruz.
ar bir dizinin adı ise her ikisi de çalışır.
İşaretçiyi kullanabilir ve referansını kaldırabilirsiniz.
Ve eğer bir işaretçi değişken ise her ikisi de çalışır.
ar plus plus gibi bir ifade kullanmak yalnızca ar bir işaretçi değişkense çalışır.
Yani bir diziyi artı artı diyerek artıramaz ve
bir sonraki elemana gitmesini bekleyemezsiniz.
Bunu yalnızca dizi işaretçileri veya işaretçiler üzerinde yapabilirsiniz.
Dolayısıyla, diziyi gösteren bir işaretçimiz varsa ve bir sonraki öğeye
gitmek istiyorsak, her seferinde onu artırabiliriz.
Ancak ar sub-i derseniz, çünkü ar sub i bir dizidir ve
bir dizi bir işaretçidir, ar artı i atadığımız bir işaretçi
olan ar diyerek bunu kaldırabilirsiniz,
bu aynı şeydir.
Önümüzdeki birkaç derste, nokta aritmetiği hakkında konuşacağız
ve bu, diziler ve işaretçiler arasındaki ilişkiyle yakından ilgilidir.
İşaretçiler diziler olabilir. Bu bir işaretçi dizisi değil, bir öğedir.
Böylece bir dizi içinde gezinmek için bir işaretçinin adresini
kullanabilir, bir dizi içinde yineleme
yapabilirsiniz. Teşekkür ederim.