Thread overview
Acemi bir soru :)
Apr 20, 2014
Acemi
Apr 21, 2014
Acemi
April 20, 2014

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!

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 20, 2014

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 21, 2014

Hızlı cevabınız için çok teşekkürler, olayı şimdi daha iyi anladım :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]