Necati Ergin Hocamın kendi sayfasında bulunan çalışma sorularını ve cevaplarını burada yanıtlamaya çalıştım. Sorulara buradan ulaşabilirsiniz.
Aşağıdaki C programı çalıştırıldığında bu programın çıktısı ne olur?
 
#include <stdio.h> int main() { int a[4] = { 2, 0, 3, 1}; int i; ++2[a][a][a][a]; for (i = 0; i < 4; ++i) printf("%d ", a[i]); return 0; }
Yanıt: 
++2[a][a][a][a]; satırı her ne kadar göze karışık ve zor görünsede aslında göstericilerde içeriğe ulaşma kurallarını göz önüne alınca oldukça basitleşiyor. Çözümü anlamak için aşağıdaki kod parçasına bakalım. 
 int a[4] = { 2, 0, 3, 1};
 printf(" %d  %d  %d \n\n", 1[a], *(a+1), a[1]);  //çıktısı 0 0 0 
 printf(" %d  %d  %d \n\n", 2[a], *(a+2), a[2]);  //çıktısı 3 3 3 
Gördüğünüz gibi 1[a] ile a[1] aynı sonuçları gösteriyor. Kısaca a dizisinin 1. Indeksli elemanına ulaşltık.
++2[a][a][a][a]; satırını yukarıdaki bilgiler ile soldan sağa doğru çözümleyelim. ++a[2][a][a][a]; şeklinde gösterebiliriz. a[2] değeri 3 olur ve ++3[a][a][a]; şekline dönüşür. ++a[3][a][a]; şeklinde tekrar dönüştürebiliriz ve a[3] değeri 1 olur. ++1[a][a]; bir sonraki dönüşümü ++0[a]; olur son adımda ++a[0]; ulaşmış oluruz ve bu da a nın 0. Indeksteki elemanının değerini bir arttırır. Sonuç olarak a dizisinin son hali { 3, 0, 3, 1} olur ve bu da programın çıktısıdır. 
Hiç yorum yok:
Yorum Gönder
Son Ütücü