Tam Sürümünü Görmek İçin : C 'de array mantigiyla ilgili
Arkadaslar merhaba, benim C dilinde arraylerin mantigiyla ilgili bir sorum olacak. array elementlerinin 0'dan baslamasinin nedeni, avantaji ... nedir ? ve bu diger programlama dillerinde de ayni midir ?
tesekkurler...
buna bagli olarak bir baska soru : pointer kullanmamizin avantaji ve mantigi nedir ?
Öncelikle diğer dillerde de aynıdır.Dizi demek sıralı olması anlamına gelir.Ve bir dizinin başlangıcıda 0 nolu elemandır.0 nolu elemanın adreside dizinin başlangıç adresidir.Dolayısıyla bu adresden başlayarak sıralı yapıyıda kullanarak diğer elemanlara ulaşırsın.
Pointer dinamik bellek demektir.Kullanıcının,programın çalışması zamanında (run time) belleği kendi kontrolünde kullanmasını sağlar.Başlangıçta almadığın için exe fazla şişmez.Ben şahsen bunun hem hızlı hemde esnek bir o kadarda tehlikeli olduğunu düşünüyorum.
@hgedek'e katılarak bir şey eklemek istiyorum. Tam emin olmamakla beraber arraylerin 0'dan başlaması amerikalıların işidir. Çünkü onlar apartman katlarında ilk katı 0 olarak sayarlar. Sanırım bu yüzden, ben bunda yarar göremiyorum açıkcası.
acehreli
25/10/2007, 00:09
ntxsoft, apartman kati konusunu ters soyluyorsun: Amerikalilar giris katina 1 derler; Turkiye'de oldugu gibi zemin yoktur.
Belki de dizi indekslerini "baslangictan uzaklik" olarak dusundukleri icin 0'dan baslatiyorlardir. Bu da herhalde C'nin donanima olan yakinligina, ve hatta ciktigi zamanlardaki islemci yazmaclarinin bunu dogal olarak desteklemesine baglidir. (Tahmin.)
Soyle dusununce tutuyor: Bir insan dogdugu anda 0 yasindadir. Bir yil yasadiktan sonra 1 yasinda olur. Insanin omrunun ilk yilina "birinci yil" deriz ama numarasi 0'dir. Ikinci yilinin numarasi 1'dir: "artik bir yasinda oldu amcasi" gibi... :)
Hatta bazi insanlar senelerin baslangicinin 0 olmamasini yanlis bulurlar. Milattan sonra 1 yili hangisidir acaba? Bu tarafa dogru olan ilk yil mi? Yani baslangictaki yila 1 dersek, milattan onceki 1'le simetrisi kalmiyor: MS1 yili takvimin baslangic yili, ama MO1 yili ondan bir yil once. Halbuki baslangic yilina 0 denseydi, MS1 ile MO1 baslangictan ayni uzaklikta olurlardi.
Ayrica dizi gostergeleri arasinda aritmetik islem konularinda ayrica bir islem yapmaya gerek kalmiyor. Dizinin ilk ogesi, dizinin adresine 0 ekleyince bulunuyor.
Butun bunlar "baslangictan uzaklik" kavramini destekliyor.
Saka olarak, eger 1 de olabilseydi o zaman da birileri neden ornegin 8'den baslamiyor diyebilirlerdi. :)
Ali
acehreli şu apartman konusu salladım sanırım itiraf ediyorum. Ayrıca yaş örneğin çok iyi uyuyor dizilere. Fakat ben ilk öğrendiğimde kafamı biraz karıştırmıştı. Kafamı karıştırandan madem 10 tane var yani sayabiliyoruz. Sayma sayılarıda 1 den başlıyo, ee burda 0 var hay ben böyle dizinin... diye gidiyo.
bence bu ilk başlarda donanım tabanlı yazılım mantığından gelen bir yaklaşım.
Pointer dizinin başladığı yeri gösteriyor. (Pointer + i. eleman) ulaşmak istediğimiz bellek gözü oluyor. Eğer 1'den başlatsaydık, pointer'ın dizinin başlangıcından bir önceki adres alanını göstermesi gerekecekti.
Belki bu daha büyük bir anlam karmaşasına yol açacaktı.
golgepapaz
25/10/2007, 09:24
Öncelikle diğer dillerde de aynıdır.Dizi demek sıralı olması anlamına gelir.Ve bir dizinin başlangıcıda 0 nolu elemandır.0 nolu elemanın adreside dizinin başlangıç adresidir.Dolayısıyla bu adresden başlayarak sıralı yapıyıda kullanarak diğer elemanlara ulaşırsın.
C de dizi[n] ifadesi aslinda *(dizi+n) anlamina gelen bir sozdizim sekeridir(syntactic sugar) ayni sekilde n[dizi] ifadesi de kullanabilirsin ve derleyecin bunu kabul edecektir.
bu yuzden diziler 0 inci elemenla indexlenir.Ve diger dillerde 0 dan basladigini soylemek
pek mumkun degil, cunku 1 ile basliyan diller(Matlab), 0 yada 1 ile baslayan diller(Pascal),
istedigin indexten baslayabilen diller var(Ada)
scripter
25/10/2007, 10:00
rakam degil de istedigin sozu index olarak vere bildigin diller de var ornrgin: PHP.
fakat PHP'de de index'i kendin belirtmesen 0,1,2 olarak gider.
Dogrusu shimdiye kadar hic 0;dan basladigina takmadim kafayi, yani arkadaslar arasinda unlu bi espiri var: calisiyorsa elleme! :) o mantiga gore de calisan hic bisey ellemem :)
0'dan basliyosa bi bildikleri vardir herhalde :)
Gokyuzu neden mavidir?
Gunes enerjisini nereden aliyor?
tukenmez kalem tukendigi halde neden tukenmez kalem deniyo?
gibi sorularla da ilgilenmem.
Euclides
25/10/2007, 10:24
bi zaman sanırım acehreli'nin şuna benzer bir kodunu görmüştüm
std::cout << 2["Merhaba"] << std::endl;
The Matrix'deki "There is no spoon"'den uyarlasak "There is no array in C" :)
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.