Merhaba, tekrar hoş geldiniz.
Bu derste, işaretçilerin tanımlanmasından, özellikle de işaretçi bildirme sözdiziminden
ve ardından bir işaretçiye bir bellek adresi atamak için adres operatörünün kullanılmasından
bahsetmek istiyorum.
Bu noktaya kadar, bir işaretçinin bir bellek adresini
işaret eden veya değeri olarak bir bellek adresi içeren
bir değişkenden başka bir şey olmadığını kafamıza kazımış olmalıyız.
Yani bir işaretçi bildirmek normal bir işaretçi oluşturmakla aynı şey değildir.
Yani pointer işaretçisi gibi bir şey yapamazsınız.
Bir işaretçiyi bildirmenin yolu bu değildir. Sözdizimi biraz farklıdır.
Yıldız işareti kullanıyorsun. Yani bir değişkenin işaretçi olduğunu söylemek yeterli değildir.
Ayrıca, işaretçinin işaret ettiği değişken türünü de belirtmeniz gerekir.
Farklı değişken türleri farklı miktarlarda depolama alanı kaplar.
Bazı işaretçi işlemleri bu depolama boyutunun bilinmesini gerektirir.
Dolayısıyla, bir veri türü belirttiğinizde normal bir değişkende
olduğu gibi, bir işaretçi veri türünde bir değişken oluşturduğunuzda
da bu veri türünü belirtmeniz gerekir.
Aşağıdakileri yaparak int türünde bir değişkene işaretçi bildirebilirsiniz:
int yıldız veya yıldız işareti p sayı.
Bu size bunun bir işaretçi olduğunu söyleyecektir.
İnt aynı görünüyor, ancak ondan sonra yıldız işareti var.
Yıldız işareti bir işaretçi olduğunu belirtir ve ardından işaretçinin
türünü belirtirsiniz. Bu bir int işaretçisidir.
p sayıları int yıldız adındaki değişkenin türü.
int türündeki herhangi bir değişkenin adresini saklayabilir.
Bir işaretçi adresleri saklar. Dolayısıyla, başka bir
değişkenin adresini saklayacaksanız, bu değişkenin
bir tamsayı türü olarak tanımlanması gerekir.
Yani burada PI int değişkenine işaret
ediyor, char star pc,
bu bir karakter değişkenine işaret ediyor, float star
pf star pg, bunlar float değişkenlerine işaret ediyor.
Onları bu şekilde tanımlıyorsunuz, tipler önemli.
Yıldız işareti ile işaretçi adı arasındaki boşluk isteğe bağlıdır.
Oraya bir boşluk koymak zorunda değilsiniz. Hiç yeriniz olmayabilir.
Sonunda ne olur, ve bir değişkenin
referansını kaldırmak hakkında konuşacağız, genellikle bildirimde bir boşluk kullanırsınız ve sonra
referansını kaldırırken bunu kullanmazsınız.
Dolayısıyla, tüm bu bildirimler geleneksel olarak bir boşluk içermelidir.
Bir işaretçinin değeri bir adrestir, bu nedenle
çoğu sistemde dahili olarak işaretsiz bir görüntü olarak temsil edilmesi gerekir.
Yani hala bir şeyler depolamak zorunda. Sadece onaltılık bir sayı depoluyor.
Ve bir tamsayı gibi göründüğü için saklıyor olsa da, bunu
bir tamsayı türü olarak düşünmeyin.
Tamsayılarla yapabildiğiniz şeyleri işaretçilerle yapamazsınız ve bunun tersi de geçerlidir.
Bu nedenle, yazdırmaya çalıştığınızda onaltılık bir sayı gibi görünecek olsa da, bu ona bir tamsayı
gibi davranabileceğiniz anlamına gelmez.
Örneğin bir tamsayıyı diğeriyle çarpabilirsiniz,
ancak bir işaretçiyi diğeriyle çarpamazsınız.
İşaretçi gerçekten yeni bir türdür, bir tamsayı türü değildir.
p yüzdesi, işaretçiler için belirtilen biçimi temsil eder.
Bir işaretçi için farklı verileri görüntüleyeceğim ve bunun nasıl kullanıldığını göreceğiz.
Önceki bildirimler değişkeni
oluşturur ancak başlatma yoktur. Orada bir görev yok.
Bir işaretçiye her zaman bir değer atamak
istersiniz, bunu başlatmazsanız çok tehlikelidir.
Bu nedenle, bir işaretçiyi bildirdiğinizde onu ilklendirmek istersiniz.
Başka bir değişkenin adresi değilse
veya bunun için dinamik olarak bellek
ayırmadıysanız, null pointer kullanabilirsiniz.
Böylece bir işaretçiyi hiçbir şeyi işaret etmeyecek şekilde başlatabilirsiniz.
Bunu null kullanarak yaparsınız.
Bir int gösterici için instar p sayısının null'a eşit olduğunu söylüyorsunuz.
Null, standart kütüphane tarafından tanımlanan bir sabittir.
Bir işaretçi için sıfıra eşdeğerdir.
Bu, hiçbir şeye işaret etmediği anlamına gelir.
Bellekte herhangi bir konuma işaret etmemesi garanti edilir.
Bunu yapmak istemeniz iyi bir şeydir çünkü bunun anlamı, yanlışlıkla bir
arabellek taşması yaparak veya yazmamanız gereken belleğe yazarak
herhangi bir hata yapmayacağınızdır.
Bu şekilde başlatıldığında, aslında yapabileceğiniz bazı hatalar sınırlandırılmış olur.
Daha önce null hakkında biraz konuşmuştuk. Boş karakter hakkında konuştuk.
Bu kavram null pointer'dan farklıdır.
Bir null işaretçi, hiçbir şeyi işaret etmediği anlamına gelir ve bununla başlatılmalıdır.
Standart def için bir include yönergesi eklemeniz gerekir. h eğer burada null tanımını kullanmak
istiyorsanız.
Operatörün adresi. İşaretçinizi adrese atamak istiyorsanız,
mevcut bir değişkenin adres
operatörünü kullanabilirsiniz.
Dolayısıyla, değişkeninizi daha önce bildirmiş olduğunuz add veya sub değişkeniyle
başlatmak istiyorsanız, ampersand operatörünün adresini kullanırsınız.
Bunu scanf fonksiyonunu tartışırken görmüştük.
Burada 99 değişkenine bir tamsayı değeri atıyoruz.
int türünde bir gösterici oluşturuyoruz ve ona number adresini atıyoruz.
Bunu yapabiliriz çünkü number bir int'tir
ve oluşturduğumuz işaretçi de bir int'e işaret etmektedir.
Yani eşittir operatöründen sonra yapmamız gereken tek şey ve işaretini kullanmaktır.
Ve şimdi p numarası numaranın adresini içerecek.
p numarasının başlangıç değeri değişken numarasının adresidir.
Sayının bildirimi, adresini saklayan işaretçinin bildiriminden
önce yapılmalıdır, çünkü
belleği ayrılmamış bir şeyi işaretçiye
atayamazsınız.
Bu işaretçiye numara atamaya çalışırsanız, daha sonra yapmadığınız sürece numara mevcut değildir.
Bir işaretçiye bir adres atamak için, bu
adres için bellek ayrılmış olmalıdır.
Aksi takdirde, derleyici şikayet edecektir.
Yine de dikkatli olun çünkü bir işaretçinin bildirimi ile ilgili özel bir şey yoktur.
Normal değişkenleri ve işaretçileri aynı deyim içinde bildirebilirsiniz.
Yani çift değer, p değeri f sayısı diyebilirsiniz.
Buradaki ifadede, sadece ikinci değişken
olan p val bir işaretçidir, diğer ikisi sadece çifttir.
Bu beyanda bu biraz daha açık, biraz
daha belirgin. Ancak yıldız pq'da derseniz, bu her
ikisinin de işaretçi olduğunu ima eder ve değillerdir.
Burada sadece bir int göstericimiz var, o da p, q
değişkeni ise sadece int tipinde.
Hem p hem de q'nun işaretçi olduğunu düşünmek yaygın bir hatadır.
Bu nedenle, aynı satırda birçok değişken üzerinde bir işaretçi bildirirken dikkatli olun.
İşaretçi adı olarak p ile başlayan adları kullanmak da iyi bir fikirdir.
Bu size, sadece bakarak o değişkenin bir işaretçi olduğunu söyleyecektir.
Bu yüzden genellikle tüm değişken bildirimlerini programın en üstünde,
genellikle ana fonksiyonun içinde yaparsınız.
Ve bu değişkenlerin programda daha sonra kullanıldığını
gördüğünüzde, farklı veri türlerini veya farklı işaretçi türlerini
kolayca tanımlayabilirsiniz çünkü önek olarak p alırlar.
Bu derste, bir işaretçiyi nasıl tanımlayabileceğiniz,
bildirebileceğiniz ve ardından mevcut bir değişkenin adresini bir işaretçiye
nasıl atayabileceğiniz üzerinde duruldu.
Şimdi, var olan bir değişkene mutlaka bir işaretçi değeri atamak
istemediğiniz durumlar vardır, belki de yeni bellek ayırmak istersiniz.
Bunlar hakkında bir sonraki derste konuşacağız. Ama şu anda basit tutacağız.
İnt türündeki işaretçileri ve double ya da float
gibi farklı kolay türleri kullanmaya odaklanacağız.
Ve mevcut değişkenleri, adreslerini atamaya
odaklanacağız ve bunun nasıl çalıştığını göreceğiz.
O zaman ilerleyelim. Teşekkür ederim.