Forum: Ders Arası RSS
Acemi bir soru :)
Acemi #1
Üye Nis 2014 tarihinden beri · 7 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Acemi bir soru :)
Merhaba,
Sitede bulunan derslerden D öğreniyorum. Pek bir acemi olduğum için şurada takıldım...
import std.stdio;
void main()
{
    int[] dilim = [ 10, 20, 30, 40 ];
    yarıla(dilim);
    writeln(dilim);
}
void yarıla(int[] sayılar)
{
    foreach (ref sayı; sayılar) {
    sayı /= 2;
}
}
Dilimler zaten referans değil midir? Yani burada foreach kullanırken ref sayı yerine sadece sayı deseydik yine de ilk tanımladığımız dilimde değişiklik yapmaz mıydı? Eğer yapmazsa yeni bir dizi mi oluşturulurdu?
Şimdiden çok teşekkürler!
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ı
Hoşgeldin, Acemi! :)

Dilim, kendisine ait olmayan elemanlara erişim sağlar. Buradaki dört elemanlı dizi D çalışma ortamına (D runtime) aittir. Orası tamam.

foreach değişkeni başlı başına bir değişkendir. Dolayısıyla, ref kullanılmadığı zaman aşağıdaki kodun eşdeğeri oluyor:
    int sayı = sayılar[i];
    sayı /= 2;
Sonuçta, foreach'in sayılar isimli değişkeni yarılanır. ref kullanınca ise şunun eşdeğeri gibi oluyor:
    sayılar[i] /= 2;
Veya, göstergelere de bulaşırsak aslında şunun eşdeğeri:
    int * sayı = &(sayılar[i]);
    *sayı /= 2;

Ali
Acemi #3
Üye Nis 2014 tarihinden beri · 7 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Hızlı cevabınız için çok teşekkürler, olayı şimdi daha iyi anladım :)
Bu mesaj Acemi tarafından değiştirildi; zaman: 2014-06-15, 14:03.
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-19, 19:46:29 (UTC -08:00)