Standart C Programlama Dili


5.8.1. Dizi Dizileri

Bir dizi benzer elemanlardan oluşan bir topluluktur. Eleman sayısı derleme sırasında belirlenir, böylece C dilinde devingen dizilere izin verilmez. Bir dizinin elemanları (alan veya fonksiyon dışında) herşey olabilir; ayrıca dizi de olabilir, böylece çok-boyutlu diziler tanımlanabilir. Bir dizinin elemanlarına ulaşmak için indisler kullanılır. İndisler tamsayı ifadelerdir ve, dizinin n tane elemanı varsa, değerleri 0 ile n-1 arasında değişebilir.

Tek-boyutlu dizileri nasıl kullanacağımızı biliyoruz. Şimdi çok boyutlu bir dizi tanımına bakalım:

int a[3][4] = {
  {   1,  2,  3,     2+2 },
  {   5,  6,  7,    1<<3 },
  { 3*3, 10, 11, 0xF&~03 }
};

Burada çok-boyutlu bir dizinin (bir dizi dizisinin) tanımının bütün boyutlarda boyların ayrı ayrı köşeli parantezler içine alınarak verildiği görüyoruz. Yukarıdaki tanımda dizinin, her biri 4 elemanlı 3 “vektör” şeklinde düzenlenmiş 12 elemanı vardır. Diğer bir deyişle, diziler satır şeklinde saklanırlar, yani son indis en hızlı değişendir. İlkleme beklendiği gibi yapılır, dizinin her elemanı için üç madde bulunmaktadır, bunlar da virgülle ayrılmış vektörlerdir. Bu maddelerin her biri birbirinden virgülle ayrılıp çengelli parantezler içine alınmış 4 değişmez ifadeden oluşurlar. Bütün (12) değerleri de belirtmemize gerek yoktur. Örneğin,

int b[3][4] = {
  { 1, 2, 3 },
  { 5, 6 }
};

ile

int b[3][4] = {
  { 1, 2, 3, 0 },
  { 5, 6, 0, 0 },
  { 0, 0, 0, 0 }
};

aynıdır. Eğer bütün değerleri belirtirsek içteki çengelli parantezlere gerek yoktur:

int a[3][4] =
  { 1, 2, 3, 2+2, 5, 6, 7, 1<<3, 3*3, 10, 11, 0xF&~03 };

Eğer derleyici dizinin boyunu ilkleyenden çıkarabilirse, o zaman boyu belirtmeye gerek yoktur. Örneğin,

int a[][4] = {
  {  1,   2,   3,     2+2 },
  {  5,   6,   7,    1<<3 },
  {3*3,  10,  11, 0xF&~03 }
};

a için ilk verilen tanıma eşdeğerdir. Bildirimdeki ilk (yani belirtilmeyebilen) indisin sadece dizi tarafından gerek duyulan bellek miktarını belirlemede kullanıldığına dikkat edin; indis hesaplamalarında kullanılmamaktadır.

Bir dizi elemanına ulaşmak için “[]” işlecini kullanırız. Eğer n-boyutlu bir dizimiz varsa, n tane böyle işleç kullanılmalıdır. Örneğin, a[1][2] değeri 7 olan dizi elemanını göstermektedir. Pascal programlama dilinden farklı olarak a[1,2]—veya a[(1,2)]a[2]’ye eşdeğerdir ve bir int’in beklendiği bir yerde kullanılamaz.