| |
 | Posted by Ali Çehreli (acehreli) in reply to erdem | Permalink Reply |
|
Ali Çehreli (acehreli) 
| Alıntı (erdem):
> ilk elemanın adresini ve dizinin uzunluğunu bildiğimizde bir dizi tanımlayabiliyoruz.
> int [] dizi = [ 1, 2, 3, 4, 5];
>
> int * p = &dizi[0] + dizi.sizeof;
> ```
>
> Örneğin yukardaki ifade D için geçerli olur mu.
İki hata var:
1) dizi.sizeof yerine dizi.length yazılmak isteniyor. Çünkü dizi.sizeof her dizi için sabittir. D dizilerinin şu yapının eşdeğeri olduklarını düşünebiliriz:
struct __Dizi
{
int * ptr;
uint length;
}
O yüzden sizeof her zaman için o türün uzunluğunu verir. (Tabii ki hayali bir tanım verdim.)
2) p, dizinin başını değil, sonundaki hayali elemanını göstermiş.
Geçerlidir ama onunla hiçbir şey yapmamız yasal olmaz.
Eğer dizinin başını gösterse, 'p'yi aynen C dizisi gibi kullanabiliriz ama o zaman da D'nin dizi olanaklarından yararlanamayız.
Ama dizinin başını göstermek için zaten dizilerin .ptr niteliği var. Yani p'ye gerek olmaz.
Alıntı:
>
> Bir de ilk elemanın adresini ve son elemandan bir sonraki hayali elemanın adresini bildiğimizde bir dizi bildirmek için yeterli oluyormuş sanırım. Bunu kodla nasıl ifade edebiliriz.
>
C'de yapılamaz.
C++'da std::vector'de yapılabilir (o zaman vector elemanların kopyalarına sahip olur).
D'de yapılabildiğini bilmiyorum. std.array modülünde bir şeyler olabilir ama hiç sanmıyorum.
Ali
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
|