Thread overview
Dizi adresini elde etmek
Oct 21, 2011
zafer
Oct 24, 2011
zafer
Oct 24, 2011
zafer
October 22, 2011
import std.stdio;

void main()
{
	int[] dizi = [1, 2, 3, 4];

	writefln("dizi adresi \t: %s", &dizi);
	writefln("dizi[0] adresi \t: %s", &dizi[0]);
	writefln("dizi ptr \t: %s", dizi.ptr);
}

Alıntı:

>

zafer@debian:~/DProjeler/TestD$ dmd -w pointer.d
zafer@debian:~/DProjeler/TestD$ ./pointer
dizi adresi : FFF2ED98
dizi[0] adresi : F74A0FA0
dizi ptr : F74A0FA0

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 :) dizi adresi olarak aldığım değer nedir? Normalde bu şekilde dizinin adresini sorduğumda zaten dizi[0] elemanının adresini almam gerekmez mi? Eğer gerekmiyorsa &dizi diyerek elde ettiğim adres nedir?

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

October 24, 2011

BU konu hakkında fikir beyan edecek bir gönüllü aranıyor ?? :-p

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

October 24, 2011

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. ]

October 24, 2011

Açıklama için teşekkürler. Bu açıklama hem sorumun cevabı oldu hemde D dilinde dizi yada dilimleri daha iyi anlamama yardımcı oldu.

Aslında çok basit gibi duran şu dilim işi, fana karışık ve detay bir konu diye düşünmeye başladım. Ama işin keyifli kısmıda burada başlıyor zaten :)

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