Diziler C++: Tanımlama, Başlatma ve İşaretçiler (Örnekler)
⚡ Akıllı Özet
Bir dizi C++ Aynı veri türündeki öğelerin ardışık bellek konumlarında depolandığı bir koleksiyona dizi denir. Burada dizileri nasıl tanımlayacağınızı, başlatacağınızı ve erişeceğinizi, dizi türlerini ve bunların avantajlarını ve dezavantajlarını öğreneceksiniz.

Dizi nedir?
Dizi, aynı veri türündeki bir öğeyi sırayla saklayan bir veri yapısıdır. A C++ dizinin sabit bir boyutu vardır.
Bir diziyi benzer veri tipindeki değişkenlerin bir koleksiyonu olarak görebilirsiniz. Her değişkeni bildirmek ve ona ayrı ayrı bir değer atamak yerine, bir değişkeni (dizi) bildirebilir ve çeşitli değişkenlerin değerlerini ona ekleyebilirsiniz. Diziye eklenen her değer bir indeksle tanımlanır.
Neden dizilere ihtiyacımız var?
Diziler herhangi bir programlama dilinde çok önemlidir. Değişkenleri veya benzer veri türündeki bir veri koleksiyonunu ayrı ayrı depolamak yerine birlikte depolamanın daha uygun bir yolunu sağlarlar. Dizinin her değerine ayrı ayrı erişilecektir.
İçinde bir dizi bildirin C++
Dizi bildirimi C++ dizi tarafından depolanacak öğe sayısının yanı sıra türün belirtilmesini içerir. Sözdizimi:
type array-Name [ array-Size ];
Tek boyutlu bir diziyi bildirme kuralları C++.
- Tip: Tür, dizide depolanacak öğelerin türüdür ve geçerli bir tür olmalıdır. C++ veri türü
- Dizi Adı: Dizi Adı, diziye atanacak addır.
- Dizi Boyutu: Dizi Boyutu, dizide depolanacak öğelerin sayısıdır. Bir tam sayı olmalı ve 0'dan büyük olmalıdır.
Örneğin, age adında bir dizi oluşturabilir ve 5 öğrencinin yaşlarını aşağıdaki gibi saklayabilirsiniz:
int age[5];
Dizi yaşı, farklı öğrencilerin yaşlarını temsil eden 5 tam sayıyı saklayacaktır.
Dizi Başlatma
Dizi başlatma, öğeleri bir diziye atama/saklama işlemidir. Başlatma tek bir ifadeyle veya tek tek yapılabilir. Bir dizideki ilk öğenin 0 dizininde saklandığını, son öğenin ise n-1 dizininde saklandığını unutmayın; burada n, dizideki toplam öğe sayısıdır.
Age dizisi durumunda, ilk eleman indeks 0'da, son eleman ise indeks 4'te saklanacaktır.
Dizi başlatmanın nasıl yapılabileceğini göstermek için yaş dizisini kullanalım:
int age[5] = {19, 18, 21, 20, 17};
{ } içindeki toplam öğe sayısı, [ ] içinde belirtilen değeri aşamaz. 19 numaralı eleman indeks 0'da, 18 indeks 1'de, 21 indeks 2'de, 20 indeks 3'te ve 17 indeks 4'te bulunur. Dizide saklanacak eleman sayısını [ ] içerisinde belirtmezseniz, dizi yalnızca { } içine eklenen öğeleri tutacak kadar büyük olacaktır. Örneğin:
int age[] = {19, 18, 21, 20, 17};
Yukarıdaki ifade öncekiyle tamamen aynı diziyi yaratacaktır. Ayrıca dizinin indeksini kullanarak bir diziye bir öğe atayabilirsiniz. Örneğin:
age[3] = 20;
Yukarıdaki ifade, age adlı dizinin 20. dizininde 3 değerini saklayacaktır. Bu, 20'nin 4 olacağı anlamına gelirth dizinin elemanı.
Dizi Türleri
İki türleri vardır C++ diziler:
- Tek boyutlu Dizi
- Çok Boyutlu Dizi
- Bir Dizinin İşaretçisi
Tek Boyutlu Dizi
Bu, veri öğelerinin yalnızca tek boyutta doğrusal olarak düzenlendiği bir dizidir. Genellikle 1 boyutlu dizi olarak adlandırılır. Sözdizimi:
datatype array-name[size];
- Dizi adı dizinin adıdır.
- Boyut, dizide depolanacak öğelerin sayısıdır.
Örneğin:
#include <iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; for (int x = 0; x < 5; x++) { cout <<age[x]<<"\n"; } }
Çıktı:
İşte kodun ekran görüntüsü:
Code Açıklama:
- iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
- Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
- Program mantığının eklenmesi gereken main() fonksiyonunun çağrılması.
- Main() işlevinin gövdesinin başlangıcı.
- 5 tamsayıyı depolamak için age adlı bir dizi bildirmek. 5 tamsayı da başlatıldı.
- For döngüsünü kullanarak bir x tamsayı değişkeni oluşturun.
- For döngüsünün gövdesinin başlangıcı.
- Dizi yaşının değerleri üzerinde yineleme yapmak ve bunları konsola yazdırmak için x döngü değişkenini kullanma. “\n” bir yeni satır karakteridir ve her yinelemeden sonra yeni bir satırda yazdırılır.
- Vücudun sonu döngü için.
- Main() işlevinin gövdesinin sonu.
Çok Boyutlu Dizi
Bu, veri öğelerinin bir dizi dizi oluşturacak şekilde düzenlendiği bir dizidir. Çok boyutlu bir dizi herhangi bir sayıda boyuta sahip olabilir, ancak iki boyutlu ve üç boyutlu diziler yaygındır. Sözdizimi:
datatype array-name[d1][d2][d3]...[dn];
Dizi adı, n boyuta sahip olacak dizinin adıdır. Örneğin:
İki Boyutlu Dizi
2D dizi, verileri 1-D dizili bir listede depolar. Satır ve sütunlardan oluşan bir matristir. 2D diziyi bildirmek için aşağıdaki sözdizimini kullanın:
type array-Name [ x ][ y ];
Tür geçerli olmalıdır C++ veri türü. 2B diziyi tablo olarak görün; burada x satır sayısını, y ise sütun sayısını belirtir. Bu, 2B dizideki her öğeyi a[x][y] formunu kullanarak tanımladığınız anlamına gelir; burada x, öğenin ait olduğu satır sayısı ve y, öğenin ait olduğu sütun sayısıdır.
Aşağıda 2 boyutlu bir dizinin nasıl başlatılacağına dair bir örnek verilmiştir:
int a[2][3] = {
{0, 2, 1} , /* row at index 0 */
{4, 3, 7} , /* row at index 1 */
};
Yukarıdaki örnekte 2×2 matris olarak görülebilen 3 boyutlu bir dizimiz var. 2 satır ve 3 sütun var. 0 elemanına, 0 indeksli satır ve 1 indeksli sütunun kesişiminde bulunduğundan,[0][1] olarak erişilebilir. 3 elemanına, 1 indeksli satır ile 2 indeksli sütunun kesişimi.
Farklı öğe sıralarını ayırt etmek için sadece küme parantezleri eklediğimizi unutmayın. Başlatma şu şekilde de yapılabilirdi:
int a[2][3] = {0, 2, 1, 4, 3, 7};
};
Aşağıdaki C++ Örnek, 2 boyutlu bir dizinin nasıl başlatılacağını ve gezinileceğini gösterir:
#include <iostream> using namespace std; int main() { // a 2x3 array int a[3][2] = { {0, 2}, {1, 4}, {3, 7} }; // traverse array elements for (int i=0; i<3; i++) for (int j=0; j<2; j++) { cout << "a[" <<i<< "][" <<j<< "]: "; cout << a[i][j] << endl; } return 0; }
Çıktı:
İşte yukarıdaki kodun ekran görüntüsü:
Code Açıklama:
- iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
- Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
- Kodun eklenmesi gereken main() işlevinin çağrılması.
- Main() işlevinin gövdesinin başlangıcı.
- Bir yorum. C++ derleyici bunu atlayacaktır.
- 2 satır ve 3 sütundan oluşan 2 boyutlu bir dizi bildirmek. Diziye öğeler de eklendi.
- Bir yorum. C++ derleyici bunu atlayacaktır.
- For döngüsü kullanarak i değişkeni oluşturma. Bu değişken dizinin satır indeksleri üzerinde yinelenecektir.
- For döngüsü kullanarak j değişkeni oluşturma. Bu değişken dizinin sütun dizinleri üzerinde yinelenecektir.
- Döngülerin gövdesinin başlangıcı.
- Konsolda köşeli parantez içinde i ve j değişkenlerinin değerlerini yazdır.
- a dizisinin [i] [j] dizininde saklanan değeri yazdırın.
- Döngülerin gövdesinin sonu.
- Program düzgün çalışıyorsa main() işlevi bir tamsayı değeri döndürmelidir.
- Main() işlevinin gövdesinin sonu.
Üç Boyutlu Dizi
3B dizi, dizilerden oluşan bir dizidir. 3B dizideki her öğe, 3 dizin kümesiyle tanımlanır. 3 boyutlu bir dizinin elemanlarına erişmek için üç for döngüsü kullanırız. Örneğin:
#include<iostream> using namespace std; void main() { int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}}; cout << "a[0][1][0] = " << a[0][1][0] << "\n"; cout << "a[0][1][1] = " << a[0][1][1] << "\n"; }
Çıktı:
İşte kodun ekran görüntüsü:
Code Açıklama:
- iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
- Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
- Program mantığının eklenmesi gereken main() fonksiyonunun çağrılması.
- main() fonksiyonunun gövdesinin başlangıcı.
- 3x2x3 boyutunda bir 2 boyutlu dizi bildiriliyor. Dizinin değerleri de başlatıldı.
- Dizinin [0][1][0] dizininde saklanan öğeye erişme ve onu konsolda yazdırma.
- Dizinin [0][1][1] dizininde saklanan öğeye erişme ve onu konsolda yazdırma.
- Main() işlevinin gövdesinin sonu.
Bir Dizinin İşaretçisi
A işaretçi adresi tutan bir değişkendir. Bir değişkenin adresini saklamak için işaretçi kullanmaktan başka, onu bir dizi hücresinin adresini saklamak için de kullanabiliriz. Bir dizinin adı sürekli olarak onun ilk elemanına işaret eder. Aşağıda verilen beyanı göz önünde bulundurun:
int age[5];
Yaş, yaş adlı bir dizinin ilk öğesinin adresi olan $age[0]'a bir işaretçidir. Aşağıdaki örneği ele alalım:
#include <iostream> using namespace std; int main() { int *john; int age[5] = { 19, 18, 21, 20, 17 }; john = age; cout << john << "\n"; cout << *john; }
Çıktı:
Yukarıdaki çıktının ilk değerinin, bilgisayarınızın belleğindeki dizinin ilk elemanına atanan adrese bağlı olarak farklı bir değer döndürebileceğini unutmayın.
İşte kodun ekran görüntüsü:
Code Açıklama:
- iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
- Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
- Program mantığının eklenmesi gereken main() fonksiyonunun çağrılması.
- main() fonksiyonunun gövdesinin başlangıcı.
- *john adında bir işaretçi değişkeni bildirmek.
- 5 tam sayıyı depolamak için age adında bir tamsayı dizisi bildirmek. Tamsayıların değerleri de başlatıldı.
- John değişkenine, age dizisinin ilk indeksinde saklanan öğenin adresinin değerini atamak.
- Age dizisinin ilk dizininde saklanan öğenin adresi olan john değişkeninin değerinin yazdırılması.
- Dizi çağında saklanan ilk değerin yazdırılması.
- Main() işlevinin gövdesinin sonu.
Dizi adları sabit işaretçiler olarak kullanılabilir ve bunun tersi de doğrudur. Bu, dizi yaşının 3. dizininde saklanan değere *(yaş + 3) ile erişebileceğiniz anlamına gelir. Örneğin:
#include <iostream> using namespace std; int main() { // an array of 5 elements. int age[5] = { 19, 18, 21, 20, 17 }; int *p; p = age; // output array values cout << "Using pointer: " << endl; for (int x=0; x<5; x++) { cout << "*(p + " << x << ") : "; cout << *(p + x) << endl; } cout << "Using age as address: " << endl; for (int x = 0; x < 5; x++) { cout << "*(age + " << x << ") : "; cout << *(age + x) << endl; } return 0; }
Çıktı:
İşte kodun ekran görüntüsü:
Code Açıklama:
- iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
- Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
- main() işlevinin çağrılması ve main() işlevinin gövdesinin başlatılması.
- Bir yorum. C++ derleyici bunu atlayacaktır.
- 5 tamsayıyı depolamak için age adlı bir dizi bildirmek.
- Tamsayı işaretçisi oluşturma s.
- Dizi yaşının ilk öğesinin adresinin değerini p'ye atamak.
- Bir yorum. C++ derleyici bunu atlayacaktır.
- Konsola bir miktar metin yazdırın.
- for döngüsü kullanarak bir x tamsayısını oluşturun. {, for döngüsünün gövdesinin başlangıcını belirtir.
- X'in değerlerini konsoldaki başka bir metinle birlikte yazdırın.
- *(p + x) değerlerini konsola yazdırın.
- For döngüsünün gövdesinin sonu.
- Konsola bir miktar metin yazdırın.
- For döngüsü kullanarak bir x değişkeni oluşturun. { for döngüsünün gövdesinin başlangıcını belirtir.
- X'in 0'dan 4'e kadar olan değerlerini başka bir metnin yanında yazdırın.
- *(yaş + x) değerlerini yazdırın.
- For döngüsünün gövdesinin sonu.
- Program başarılı bir şekilde çalışıyorsa değeri döndürün.
- Main() işlevinin gövdesinin sonu.
Bir Dizinin değerlerine erişme
Bir dizinin elemanlarına, ilgili dizinleri kullanılarak erişilir. Erişilecek elemanın dizini, dizi adından hemen sonra köşeli parantez [ ] içine eklenir. Örneğin:
int john = age[2];
Yukarıdaki örnekte, John'un yaşının, age adlı dizinin 2. dizininde saklandığını belirtiyoruz. Bu, John'un yaşının 3 olduğu anlamına gelirrd dizi çağındaki değer. İşte tam bir C++ bu değere nasıl erişileceğini ve yazdırılacağını gösteren örnek:
#include<iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; int john = age[2]; cout << "The age of John is:"<<john; }
Çıktı:
İşte kodun ekran görüntüsü:
Code Açıklama:
- iostream başlık dosyasını kodumuza dahil ediyoruz. Konsoldan okumamıza ve konsola yazmamıza olanak tanıyacak.
- Sınıflarını ve işlevlerini çağırmadan kullanabilmek için std ad alanını dahil etmek.
- Kodun eklenmesi gereken main() işlevinin çağrılması.
- Main() işlevinin gövdesinin başlangıcı.
- 5 tam sayı öğesini depolamak için age adlı bir dizi bildirmek.
- Dizi çağının 2. indeksinde saklanan değere erişilmesi ve değerinin john adlı bir değişkende saklanması.
- John değişkeninin değerinin konsolda diğer metinlerle birlikte yazdırılması.
Bir Dizinin Avantajları C++
Burada Array'i kullanmanın artıları/yararları verilmiştir. C++:
- Dizi elemanları kolayca geçilebilir.
- Dizi verilerini değiştirmek kolaydır.
- Dizi elemanlarına rastgele erişilebilir.
- Diziler kod optimizasyonunu kolaylaştırır; dolayısıyla daha az kod kullanarak daha fazla iş yapabiliriz.
- Dizi verilerini sıralamak kolaydır.
Bir Dizinin Dezavantajları C++
- Bir dizinin sabit bir boyutu vardır; dolayısıyla başlatma sonrasında ona yeni öğeler ekleyemiyoruz.
- Gerekenden daha fazla bellek tahsis edilmesi bellek alanının israfına yol açar ve daha az bellek tahsisi sorun yaratabilir.
- Bir dizide saklanacak eleman sayısı önceden bilinmelidir.











