by

C/C++ Dizilere ait İlginç Bir Özellik

Bugün internette dolaşırken şu şekilde bir kullanıma rastladım. Bunu sizlerle paylaşmak istiyorum.

int main() { int array[] = {10 , 20 , 30 , 40 , 50}; int index = 2; printf(“%d\n” , index[array]); /* Bu satıra dikkat */ return 0; }

Normalde diziye erişim yaparken dizi_ismi[indis] şeklinde erişim yaparız. Fakat yukarıdaki hiçbir şekilde hata vermeden “array[index]” ile aynı sonucu veriyor.

İspatına gelince de şu şekilde;

Dizi veri yapısı bellekte bitişken şekilde açılır. Yani her bir indis bellekte rastgele yerlere değil ardışık biçimde dizilir. Biraz da pointer aritmetiğine bakacak olursak;

array[index] = *(array + index)
*(array + index) = *(index + array)
*(index + array) = index[array]
array[index] = index[array]

Bu yukarıdaki kodu herhangi başka bir programlama dilinde yani en azından benim bildiklerim arasında (C/C++ hariç) yazarsanız derleme aşamasında hata alırsınız. Böyle bir işleme izin verilmez.