Dizi ve İşaretçi Arasındaki Fark
İçerik
Dizi ve işaretçi arasında yakın bir ilişki var. İşaretçi dizi öğelerine erişmek için kullanılabilir, işaretçi aritmetik kullanılarak tüm diziye erişilir, erişimi daha hızlı yapar. Bir işaretçi ile bir dizi arasında temel bir fark vardır; dizi, benzer veri tipindeki değişkenlerin bir koleksiyonudur, işaretçi ise başka bir değişkenin adresini saklayan bir değişkendir. Bir dizi ile karşılaştırma tablosunda aşağıda tartışılan bir işaretçi arasında başka bazı farklılıklar vardır.
- Karşılaştırma Tablosu
- Tanım
- Anahtar Farklılıklar
- Sonuç
Karşılaştırma Tablosu
Karşılaştırma için temel | Dizi | Işaretçi |
---|---|---|
deklarasyon | // C ++ dilinde var_name; // Java’da. var-name yazın; var_name = yeni tür; | // C ++ dilinde type * var_name; |
Çalışma | Homojen veri tipi değişkeninin değerini saklar. | İşaretçi değişkenleri veri türü ile aynı veri türündeki başka bir değişkenin adresini saklayın. |
nesil | Bir dizi işaretçi oluşturulabilir. | Bir diziye bir işaretçi oluşturulabilir. |
Java Desteği | Dizi kavramını destekleyin. | İşaretçileri desteklemez. |
Depolama | Normal bir dizi değişken değerlerini saklar ve pointer dizisi değişkenlerin adresini saklar. | İşaretçiler, değişkenlerin adresini depolamak için özel olarak tasarlanmıştır. |
Kapasite | Bir dizi, dizi değişkeninin boyutunda belirtilen element sayısını saklayabilir. | Bir işaretçi değişkeni bir seferde yalnızca bir değişkenin adresini saklayabilir. |
Array tanımı
Bir dizi, aynı veri tipindeki elemanların toplanmasıdır ve tüm bu elemanlara, bir dizi değişkeninin adı olan ortak bir ad verilir. Belirli bir dizi elemanına, o öğenin depolandığı dizinin belirli bir dizinine erişerek erişilebilir. Diziler, tek boyutlu bir dizi, iki boyutlu bir dizi veya çok boyutlu bir dizi olabilir. Bir işaretçi dizisi, yani tüm değişkeni işaretçi değişkeni içeren bir dizi de üretilebilir. “C ++” da diziler statik olarak tahsis edilirken, “Java” da diziler dinamik olarak tahsis edilir.
// C ++ yazın var_name; // Java’da. var-name yazın; var_name = yeni tür;
Burada 'type', bir dizi değişkeninin veri türünü, 'var_name', dizi değişkenine verilen adı, 'size', dizi değişkeninin kapasitesini, yani 'type' öğesinin bu dizi değişkeninde ne kadar saklanabileceğini belirtir. . ‘İng pointer aritmetiği’ olan daha önce ‘pointer aritmetiği’ ve second pointer aritmetiği ’olan bir diziye erişmenin iki yöntemi vardır.
// işaretçi aritmetik kullanarak erişim Void display_array (int * S) {while (* s) {cout (<< "değeri" << * s); * ++ s; }}
‘Pointer aritmetik’ kullanmak, ‘dizi indekslemeye’ kıyasla daha hızlı çalışır, yani dizini kullanarak dizi değişkenine erişir. Bir işleve bir işaretçi dizisini iletmeniz gerekiyorsa, normal bir diziyi iletmek için kullandığınız aynı yöntem kullanılarak yapılabilir, yani işlevi dizinin adı olmadan doğrudan dizinin adıyla çağırın.
Örnek ile anlayalım
// İşaretçiler dizisini bildirme. int * p;
Burada, 'p'nin bir tamsayı tipi dizisi olduğunu gösterir, 10'luk tamsayı değişkeninin adresini tutacaktır. Yukarıdaki işaretçi dizisini bir işlev göstergesine () geçirelim.
ekran (p); // İşlev ekranını arayın. void display (int * d) {// İşaretçi dizisini geri alma işlevi. (int i = 0; i <10; i ++) {cout << ("dizin" <için
Bu fonksiyon, adresleri bu imleç dizisinde sırayla saklanan değişkenlerde mevcut olan değerleri gösterecektir.
Pointer'un tanımı
İşaretçi, başka bir değişkenin hafıza adresini tutan bir değişkendir. İşaretçi değişkeni ve adresi bir işaretçi değişkenine atanan değişkenin veri türü aynı olmalıdır. İşaretçi değişkeni aşağıdaki gibi bildirilir.
// C ++ 'da bildirge * name;
Burada ‘type’ bir datatype, ‘name’ işaretçi değişkeninin adıdır. "Tür", işaretçi değişkeninde ne tür bir değişken adresinin saklanabileceğini tanımlar. Örneğin, tamsayı işaretçisi, tamsayı değişkeninin adresini kaydeder. İki * ’ve‘ & ’işaretçi operatörü vardır. Operatör ‘*’, ‘*’ işaretiyle takip edilen değişkende kayıtlı adreste bulunan değeri döndürür. ‘&’ Operatörü değişkenin adresini ve ardından ‘&’ işaretini döndürür.
// örneğin int b = 10 int a = & b; // Burada b adresi a değişkeninde saklanır. // b adresinin 2000 olduğunu gösterir, yani şimdi a = 2000. int c = * a; // Burada tamsayı işaretçi değişkeni * a, bir .ie'de saklanan adreste bulunan değeri döndürür. c = 10.
İşaretçiler üzerinde, yani toplama ve çıkarma işlemlerinde kullanabileceğiniz sadece iki aritmetik işleci vardır. Bir tamsayı işaretçi değişkenine bir artış uygularsanız, bir tamsayı işaretçisi olduğundan, artım üzerine bir sonraki tamsayı değişkenine işaret etmesi gerekir, yani veri tipinin boyutu yani 2 bayt artar. Aynı azalış durumunda.
// p, 2000 değerini içeren bir tamsayı göstericisidir. p ++; // şimdi p = 2002. P-; // şimdi p, iki bayt tarafından azaltılmış olarak yine 2000 içerir.
- Bir dizi benzer veri türlerinin değişkenlerini saklar ve değişkenlerin veri türlerinin dizi türüyle eşleşmesi gerekir. Diğer taraftan, işaretçi değişkeni, bir işaretçi değişken türüne benzer bir türdeki bir değişkenin adresini depolar.
- Değişkenleri işaretçi değişkenleri olan bir dizi işaretçi oluşturabiliriz. Öte yandan, bir diziye işaret eden bir işaretçi oluşturabiliriz.
- Java diziyi destekliyor ancak işaretçileri desteklemiyor.
- Bir dizi boyutu saklayabileceği değişkenlerin sayısını belirler; Bir işaretçi değişkeni yalnızca değişkenin adresini saklayabilir
Not:
Java işaretçileri desteklemiyor veya kesinlikle engellemiyor.
Sonuç:
Benzer veri tipindeki veri elemanları üzerinde çalışmamız gerektiğinde, değişkenler üzerinde ayrı ayrı çalışmak yerine, benzer veri tiplerinde bu değişkenlerden oluşan bir dizi oluşturabilir ve sonra üzerinde çalışabiliriz. İşaretçiler bazı program için gereklidir, muazzam bir güç sağlar, ancak ne yazık ki, bir işaretçi yanlış bir değer içeriyorsa, bulunması en zor hata olacaktır.