Forum: Ders Arası RSS
Normal Olarak ve new İle Dizi Tanımlamanın Farkı Nedir ?
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Normal Olarak ve new İle Dizi Tanımlamanın Farkı Nedir ?
Tdpl'yi okurken şöyle bir tanım gördüm(Burada da görmüştüm.):
int[] arr = new int[20];
Bende neden    
int[] b;
b.length=20;
biçiminde göstermediğini merak ettim. Sadece daha kısa kod yazımı için mi ? Birde new'i dinamik dizi ve sınıftaki görevinden başka yararı var mı ?
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ı
Birisi tek satır, diğeri iki satır... :)

İkisinde de elemanlar için dinamik bellekten yer ayrılır. Şu programdaki adreslerden de anlaşıldığı gibi, ikisinin elemanları bellekte komşu olarak duruyorlar:

import std.stdio;
import std.array;
 
void bilgiVer(string isim, ref int[] dizi)
{
    writeln("isim              : ", isim);
    writeln("dilimin adresi    : ", &dizi);
    writeln("elemanların adresi: ", dizi.ptr);
    writeln("uzunluk           : ", dizi.length);
    writeln("kapasite          : ", dizi.capacity);
}
 
void main()
{
    int[] a = new int[20];
 
    int[] b;
    b.length=20;
 
    bilgiVer("a", a);
    bilgiVer("b", b);
}

Şu anda 'Bellek Yönetimi' isimli dersi bitirmeye çalışıyorum ama Phobos'la oynamaktan zaman bulamıyorum. :D new ve delete orada anlatılacak.

new'e ve delete'e normalde D'de hiç ihtiyaç yok ama değişkenlerin dinamik bellekten ayrılan bir yerde kurulması için kullanıldığını söyleyebiliriz. Bir int bile new ile oluşturulabilir.

Ama new gösterge döndürdüğü için değişkenin türünü int* olarak yazmak gerekir:

import std.stdio;
 
void main()
{
    int * sayıGöstergesi = new int;
    *sayıGöstergesi = 42;
 
    writeln("adresi: ", sayıGöstergesi, " değeri: ", *sayıGöstergesi);
 
    // Dinamik değişkenler de çöp toplayıcı tarafından temizlenirler; ama
    // kendimiz delete ile de çabucak sonlandırabiliriz:
    delete sayıGöstergesi;
}

Ali
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, 07:57:13 (UTC -08:00)