sayfa başı

26 Şubat 2019 Salı

C Çalışma Soruları – 21 (göstericiler)

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ü