‫Merhaba ve hoş geldiniz.
‫Bu derste referansları ve işaretçilerin alternatiflerini öğreneceğiz ve neden farklı olduklarını, neden onları
‫kullanmak isteyebileceğimizi göreceğiz.
‫Hadi dalalım ve görelim.
‫İşaretçilerin yanı sıra, referans adı verilen çok benzer bir kavram vardır.
‫Şimdi hem işaretçiler hem de referanslar aslında sadece bir bellek adresidir.
‫Her ikisi de başka bir değişkenin bulunabileceği yere bir referans saklar ve bu şekilde inanılmaz derecede benzerdirler.
‫İkisi arasındaki fark, temelde yeniden tayin edilip edilemeyeceklerine bağlıdır.
‫Temel olarak, ilk oluşturulduktan sonra farklı bir adrese işaret edebilirler mi?
‫Bir işaretçi söz konusu olduğunda, bu cevap evettir.
‫Doğru türe sahip olduğu sürece, bir işaretçiyi istediğiniz zaman yeni bir bellek adresine, yeni bir aktöre, yeni bir bileşene
‫işaret edecek şekilde değiştirebilirsiniz.
‫Öte yandan bir referans, başka bir değişkene işaret etmek için ilk oluşturduğunuzda yalnızca bir kez ayarlanabilir,
‫daha sonra tekrar değiştirilemez.
‫Ve bu bir güvenlik özelliğidir çünkü değişkenleri yeniden işaret etmek, bu değişkenlerin kaybolabileceği
‫veya işaretçiyi null olarak ayarladığınız sorunlara yol açabilir.
‫Null işaretçi aslında hiçbir şeyi işaret etmeyen bir işaretçidir ve hiçbir şeyi işaret etmeyen bir işaretçiyle bir şeyler
‫yapmaya çalışmak aslında motorunuzu çökertebilir, bu da referanslar için ideal bir sonuç değildir çünkü onları ilk oluşturduğunuzda
‫onlara bir değer vermeniz gerekir.
‫Null olamazlar, bu nedenle bu null işaretçi çökmelerini alamazsınız.
‫Şimdi söz konusu sözdiziminin bazılarına göz atmaya başlayalım.
‫Bu nedenle, içeriğe bir işaretçi ile eriştiğinizde, bazı özel sözdizimi kullanmanız gerekir.
‫Referanslarla bellek adresini değil, işaretçideki değeri aldığınızdan emin olmak için bu yıldızı
‫işaretçinin önüne koymanız gerekir, çünkü bellek adresini hiçbir zaman tutmanız gerekmez.
‫Değişkeni, işaret ettiği değişkenmiş gibi kullanabilirsiniz.
‫Özel bir söz dizimi kullanmanız gerekmez.
‫Şimdi adrese erişim var, bu yüzden işaretçilerle adresi otomatik olarak tutarsınız.
‫Değişkeni bir referansla kullandığınızda, özel sözdizimi kullanmanız gerekir.
‫Bunu yapmak için address of operatörünü kullanmanız gerekir ve bu size temelde orijinal değişkenle
‫aynı adresi verecektir.
‫Bir de adresi bir işaretçi ile değiştirmek var.
‫Referanslarla bunu yapmak için adres atayabileceğinizi ve operatörün adresini kullanabileceğinizi gördük.
‫Buna izin verilmez, bu yüzden bunun için bir sözdizimi yoktur.
‫Ve son olarak, ya işaret ettiğimiz değeri, adresi değil de o adreste depolanan gerçek
‫değeri değiştirmek istersek?
‫İşaretçilerle yine bazı özel sözdizimi kullanmanız gerekir.
‫O yıldızı koymalı ve sonra bir şey atamalıyız.
‫Yani aktör işaretçisini yine referanslarla yıldız aktör işaretçisine atarsınız çünkü gerçek adresi değiştiremezsiniz, ekstra
‫bir sözdizimine ihtiyacınız yoktur.
‫Ekstra sözdizimini bırakabilir ve sadece aktör referansının eşit olmasını sağlayabiliriz.
‫Aktör, işaret edilen konumdaki değerin üzerine yazdığınız anlamına gelir.
‫Yani bunların hepsi biraz teorik.
‫Gerçek bir örnek verelim.
‫Dolayısıyla, belki de oyunda bize verilen hasarı depolayan bir float'ımız olsaydı ve mevcut hasarı depoladığımız float
‫sıfıra ayarlanmış olsaydı.
‫Kimse bize zarar vermedi.
‫Şimdi, kopyalamak yerine buna bir referans oluşturmak isteyebiliriz, bunu bir fonksiyona aktarmak
‫isteyebiliriz, ancak aslında değiştirmeden.
‫Bunu yapmanın yolu, bir float değerine sahip olmak ve float değerinden sonra ve işareti koymaktır.
‫Ve ve işareti bunun bir float'a referans olduğunu söyler.
‫Kendisi yeni bir float değildir, herhangi bir float belleği ayırmaz.
‫Sadece bir işaretçi belleği ayırır.
‫Bu yüzden buna hasar ref'i diyebilir ve hasara eşit olarak ayarlayabiliriz.
‫Adresini almamız ya da böyle bir şey yapmamız gerekmiyor.
‫Otomatik olarak bunun bir referans ve bunun da bir değişken olduğunu bilir.
‫Yani burada yapmaya çalıştığınız şey, bu değişkene bir referans oluşturmaktır.
‫Ve elbette, eğer gidip günlüğe kaydedersek, bunu normal bir şamandıra gibi yazdırabiliriz,
‫böylece hasar kolonu ve ardından yüzde F diyebiliriz ve sonra burada sadece hasarı yazdırabiliriz ref.
‫Özel bir sözdizimine ihtiyacımız yok.
‫Bunu normal bir değişken gibi kullanabiliriz.
‫Derledikten sonra play tuşuna basalım, çıktı günlüğümüze bir göz atalım ve yeterince emin olalım,
‫hasar sıfır olarak çıkıyor, bu da ayarladığımız değerdi.
‫Ancak bu, söz konusu orijinal değişkenin bir kopyasını oluşturmadığımı kanıtlamaz.
‫Bu nedenle, değeri değiştirmeyi denemenizi ve ne olacağını görmenizi söyleyelim.
‫Bu nedenle, yeni bir değer ayarlamak için referansı, hasar referansını kullanın ve ardından orijinal
‫değeri referans değerin yanına yazdırın ve bir göz atın.
‫Aynı mıdırlar yoksa farklı mıdırlar?
‫Sadece referansı değiştiriyorsunuz, ama orijinali de değiştiriyor musunuz?
‫Çünkü bu, her ikisinin de aynı değişken olduğu anlamına gelir.
‫Videoyu duraklatın ve deneyin.
‫Tamam.
‫Tekrar hoş geldiniz.
‫O zaman bir deneyelim.
‫Şimdi referansı değiştirmek için, damage ref equals yapacağız.
‫Bu kez beş hasar verdiğimizi söyleyeceğim ve burada herhangi bir özel sözdizimi kullanmak zorunda kalmadığımı fark edeceksiniz.
‫Referansı yeniden işaretlemiyor çünkü onu zaten bildirdik ve oluşturulduğunda referansını
‫ilk satırda ayarladık.
‫Bunu tekrar yapamayız.
‫Şimdi sadece değeri ayarlayabiliriz.
‫Şu anda yapabileceğim şey, hasarı tespit etmek.
‫Aynı dizeye bir hasar ve yüzde f koyalım ve ardından hasarı da buraya aktaralım.
‫Sonra da derleyip bir göz atacağız.
‫Oynat tuşuna basalım, çıktı günlüğümüze gidelim ve yeterince emin olalım, hasar ref ve hasarın her ikisi de beş değerini
‫belirlediğimiz yeni değere sahip olarak yazdırılıyor.
‫Yani özünde, burada aynı bellek parçasına işaret eden iki değişkenimiz var.
‫Neredeyse aynı değişken olduklarını, ancak farklı isimlere sahip olduklarını söyleyebilirsiniz.
‫Yani bu, tıpkı bir işaretçi gibi bir kopyaya ihtiyaç duymama avantajına sahiptir, ancak aynı zamanda kullanımı çok daha kolay
‫olduğu için çok daha fazla faydası vardır.
‫Tüm bu ekstra sözdizimine ihtiyacımız yok ve ayrıca kullanımı daha güvenli.
‫Dolayısıyla, herhangi bir şeyi yeniden işaret etmemiz gerekmediği sürece, referansları kullanmak genellikle tercih edilir.
‫Şimdi burada kullandığımız bazı sembolleri hızlıca gözden geçirelim çünkü biraz kafa karıştırıcı olabilirler.
‫C++'da çok kullanılırlar.
‫Şimdi ve işareti ve yıldız sembollerine bağlam içinde ve ne anlama geldiklerine bir göz atalım.
‫Dolayısıyla, bunları kullandığımızda, yani bunları bir ifadede kullandığımızda, işte bazı kod örnekleri.
‫Yıldızı bir değişkenden önce görebilirsiniz.
‫Bir değişkenden önce ve işaretini görebilirsiniz.
‫Bu ne anlama geliyor?
‫Yıldız sembolünü değişkenden önce koymanın sözdizimi, şimdi ampersand ile aktör işaretçisindeki
‫içeriği alacağımız anlamına gelir.
‫Bir değişkenin önüne veya bir değişkene yapılan referansın önüne ve işareti koyarsanız,
‫bu değişkenin adresini aldığını söyler.
‫Aktörün adresini veya referansın işaret ettiği adresi alıyor.
‫Şimdi bunu bir değişken tipinde kullandığımızı beyan ettiğimizde, yıldızlar ve ve işareti neredeyse
‫zıt anlamlara sahiptir.
‫Yani yıldız, bunun yeni bir aktöre işaretçi olduğu anlamına gelir ve ve işareti de bunun yeni bir aktöre referans olduğu
‫anlamına gelir.
‫Bu nedenle, ister bir ifadede bir değişkenle kullanın, ister bir değişkeni
‫bildiren türde kullanın, tamamen farklı bir anlamlar kümesi olduğunu unutmayın.
‫Şimdi, çok fazla ayrıntıya girmeyeceğim, ancak yaralanmaya hakaret eklemek için, bunların
‫aslında başka bağlamlarda başka anlamları olabilir, ampersand biraz akıllıca anlamına gelebilir ve yıldız, daha önce gördüğümüz
‫gibi, U günlüğündeki dizelerle birlikte kullanılabilir.
‫Bu iki sembolün tüm anlamları bu kadar değildir, ancak işaretçiler ve referanslara
‫atıfta bulunan hemen hemen tüm önemli anlamlar bunlardır.
‫Harika bir şey.
‫Böylece işaretçiler, referanslar, bunların birbirleriyle nasıl ilişkili oldukları, nasıl farklı oldukları ve neden bunları
‫kullanmak isteyebileceğimizi öğrendik.
‫Bir sonraki derste görüşürüz.