Forum: Ders Arası RSS
Referans tipi hk.
Referans tipi ve türünün farkları
zafer #1
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Referans tipi hk.
http://ddili.org/ders/d/deger_referans.html adresindeki konuya bakıyorum.

Bu referans tipi biraz kafamı karıştırdı. Önce göstericilere benzettim ama göstericilerinde bellekte bulundukları bir yer var diye biliyorum oysa referans tipleri değişken ile aynı adresi gösteriyor biraz karıştı galiba bu arada referans türü sanırım göstericiler gibi birşey bu konularda biraz daha bilgi almam mümkün mü?
https://github.com/zafer06 - depo
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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.

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


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
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-22, 03:01:07 (UTC -08:00)