İşaretçi Diziye Karşı
Bir işaretçi, bir bellek konumuna referansı tutan bir veri türüdür (yani bir işaretçi değişkeni, bazı verilerin depolandığı bir bellek konumunun adresini saklar). Diziler, bir öğe koleksiyonunu depolamak için en yaygın kullanılan veri yapısıdır. Çoğu programlama dili, dizileri kolayca bildirmek ve dizilerdeki öğelere erişmek için yöntemler sağlar.
İşaretçi nedir?
İşaretçi, bazı verilerin depolandığı bir bellek konumunun adresini saklayan bir veri türüdür. Başka bir deyişle, bir işaretçi bir bellek konumuna bir referans tutar. İşaretçi tarafından başvurulan bellek konumunda depolanan verilere erişim, başvurudan çıkarma olarak adlandırılır. Ağaçları/dizeleri dolaşmak, tablo aramaları vb. gibi tekrarlayan işlemler gerçekleştirirken, işaretçiler kullanmak performansı artırır. Bunun nedeni, işaretçilerin referansını kaldırmanın ve kopyalamanın, işaretçiler tarafından işaret edilen verileri kopyalamaktan ve bunlara erişmekten daha ucuz olmasıdır. Boş gösterici, hiçbir şeye işaret etmeyen bir işaretçidir. Java'da bir boş göstericiye erişmek, NullPointerException adlı bir istisna oluşturur.
Dizi nedir?
Şekil 1'de gösterilen, tipik olarak bir diziye değer bildirmek ve atamak için kullanılan bir kod parçasıdır. Şekil 2, bir dizinin bellekte nasıl görüneceğini gösterir.
int değerleri[5]; values[0]=100; değerler[1]=101; değerler[2]=102; değerler[3]=103; değerler[4]=104; |
Şekil 1: Bir diziye değer bildirme ve atama kodu
100 | 101 | 102 | 103 | 104 |
Dizin: 0 | 1 | 2 | 3 | 4 |
Şekil 2: Bellekte depolanan dizi
Yukarıdaki kod, 5 tamsayı depolayabilen bir diziyi tanımlar ve bunlara 0 ila 4 arasındaki indeksler kullanılarak erişilir. Bir dizinin önemli bir özelliği, tüm dizinin tek bir bellek bloğu olarak tahsis edilmesi ve her öğenin kendi değerini almasıdır. dizideki kendi alanı. Bir dizi tanımlandıktan sonra boyutu sabitlenir. Bu nedenle, derleme zamanında dizinin boyutundan emin değilseniz, güvenli tarafta olmak için yeterince büyük bir dizi tanımlamanız gerekir. Ancak çoğu zaman aslında ayırdığımızdan daha az sayıda eleman kullanacağız. Yani hatırı sayılır miktarda bellek aslında boşa harcanıyor. Öte yandan, "yeterince büyük dizi" aslında yeterince büyük değilse, program çökecektir.
İşaretçiler ve Diziler arasındaki fark nedir?
İşaretçi, bazı verilerin depolandığı bir bellek konumunun adresini saklayan bir veri türüdür, Diziler ise bir öğe koleksiyonunu depolamak için en sık kullanılan veri yapısıdır. C programlama dilinde, dizi indeksleme işaretçi aritmetiği kullanılarak yapılır (yani x dizisinin i'inci elemanı (x+i)'ye eşdeğerdir). Bu nedenle, C'de, ardışık olan bir dizi bellek konumuna işaret eden işaretçiler kümesi, bir dizi olarak düşünülebilir. Ayrıca, sizeof operatörünün işaretçiler ve diziler üzerinde nasıl çalıştığı konusunda bir fark vardır. Bir diziye uygulandığında, sizeof operatörü dizinin tüm boyutunu döndürürken, bir işaretçiye uygulandığında yalnızca işaretçinin boyutunu döndürür.