Biraz karışık bir hafta sonuydu; bunu unutmuşum. :)
Alıntı (zafer:1319272221):
> Bu kodun bendeki çıktısınıda ekledim. Normalde &dizi ve &dizi[0] ve tabi ki dizi.ptr adreslerinin aynı olmasını bekliyordum ama sadece ikisi tuttu :)
C ve C++'ta 'dizi' diye ayrıca bir nesne yoktur. Dört eleman yan yana durarak dizi kavramını oluştururlar. O yüzden ilk elemanın adresiyle dizinin kendi adresi aynıdır:
'
C ve C++'ta dizi bu dört elemanın kendisidir; ayrıca 'dizi' diye başka bir şey yoktur:
--+--------+--------+--------+---------+--
| 1 | 2 | 3 | 4 |
--+--------+--------+--------+---------+--
'
D'de ise yukarıdaki programdaki 'dizi' aslında iki üyeden oluşan bir nesnedir (dilimdir). Perde arkasında elemanları gösteren bir göstergeden ve bu dilimin kaç elemana eriştirdiği bilgisinden oluşur. dmd/src/druntime/src/rt/aaA.d dosyasından kopyalıyorum:
struct Array
{
size_t length;
void* ptr;
}
Yukarıdaki programdaki durum şudur:
'
Dört eleman D çalışma ortamına ait olarak bellekte dururlar. 'dizi' is gerçekten de main içinde yaşayan başlı başına bir nesnedir:
--+--------+--------+--------+---------+--
| 1 | 2 | 3 | 4 |
--+--------+--------+--------+---------+--
^
|
dizi nesnesi |
+-----------+ |
length == 4 |
ptr -------------
+-----------+
'
Sonuç:
- &dizi: dizi nesnesinin yeri
- dizi.ptr: dizinin gösterdiği elemanların yeri
- &dizi[0]: ilk elemanın adresi (üsttekiyle aynı)
Ben bu gösterimleri & işlecini ve göstergeleri anlatana kadar ertelemeye karar vermiştim. :) Göstergeleri de değer ve referans kavramlarının farklarını iyice anladıktan sonraya bırakmıştım.
"Değerler ve Referanslar" bölümünde "Referans türü" başlığı altında biraz bilgi var:
http://ddili.org/ders/d/deger_referans.html
ptr da "Göstergeler" bölümünün "Dizilerin .ptr niteliği" başlığı altında geçiyor:
http://ddili.org/ders/d/gostergeler.html
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]