Alıntı (zafer):
> Bu referans tipi biraz kafamı karıştırdı. Önce göstericilere benzettim
Doğru. Şöyle söyleyebiliriz: C ve C++'ta referans türü kavramı göstericilerle gerçekleştirilir. (İşin garibi, C++'ta & karakteri ile tanımlanan referanslar referans türü kavramından çok takma isim anlamına gelirler.)
Ben atama işlecinin davranışına bakarak anlıyorum: Eğer atama işlemi veri kopyalıyorsa değer türüdür, eğer varolan bir veriye erişim sağlıyorsa referans türüdür.
Alıntı:
> ama göstericilerinde bellekte bulundukları bir yer var diye biliyorum oysa referans tipleri değişken ile aynı adresi gösteriyor
Aslında değişkenden farklılar. Sınıflarda görmek için en iyisi sınıfın bir üyesinin adresini yazdırmak:
import std.stdio;
class C
{
int i;
}
void main()
{
auto r = new C();
writeln("referans: ", &r);
writeln("değişken: ", &r.i);
}
İlgisiz adresteler:
'referans: 7FFFA6901EB8
değişken: 2B707F089F90'
Dilimler de bir çeşit referans türü kabul ediliyorlar. Onların da kendi adresleriyle elemanlarının adresini yazdırabiliriz. .ptr niteliği de ilk elemanın adresidir:
import std.stdio;
void main()
{
auto r = [ 0, 42 ];
writeln("referans: ", &r);
writeln("eleman : ", &r[0]);
writeln(".ptr : ", r.ptr);
}
Çıktısı:
'
referans: 7FFF0A2930F0
eleman : 2AF5A76B0FD0
ptr : 2AF5A76B0FD0'
Alıntı:
> referans türü sanırım göstericiler gibi birşey
Doğru. Değer türlerinin referans türlerini elde etmek için yine C ve C++'ta olması gerektiği gibi göstericilerden yararlanmak zorundayız. Bu durumda int* ve Y* referans türü oluyorlar:
import std.stdio;
struct Y
{}
void main()
{
auto y = Y();
Y * r0 = &y;
Y * r1 = r0; // <-- referans türü çünkü r0'ın eriştirdiğine eriştiriyor
int i;
int * r2 = &i;
int * r3 = r2; // <-- aynı şekilde
}
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]