E-Gürbüz

C Bulmaca – 1

Posted in C Programlama by Emre on Haziran 21, 2008
Aşağıdaki ufak C programının "idizi" sayı dizisinin elemanlarını
 yazdırması beklenmektedir, ancak program bunu yapmıyor?

  #include<stdio.h>
  #include<stdlib.h>

  #define TOPLAM_ELEMAN (sizeof(idizi) / sizeof(idizi[0]))
  int idizi[] = {23,34,12,17,204,99,16};

  int main()
  {
      int d;

      for(d=-1;d <= (TOPLAM_ELEMAN-2);d++)
          printf("%d\n",idizi[d+1]);
      return EXIT_SUCCESS;
  }

Not: MinGW 2.05 ile derlenmiş ve çalıştırılmıştır.ANSI C89
standartlarına uygundur.

Bir Yanıt

Subscribe to comments with RSS.

  1. Emre said, on Haziran 23, 2008 at 7:11 am

    sizeof C de tanımlı bir operatordur. Sonuc olarak unsigned turunden bir deger dondurur.
    Dongu iteratoru olarak kullanilan “d” degiskeni ise signed integer türündedir.
    d<= TOPLAM_ELEMAN-2 ifadesinde biri işaretli digeri isaretsiz iki tur işleme tabi tutuluyor.Bu durumda derleyici otomatik olarak isaretli tamsayiyi isaretsize cevirir.
    D nin değeri -1 iken, isaretsiz tam sayı oldugunda yeni değer 2^32-1 olacaktir.(32bitlik işlemcilerde) Böylece for döngüsünün kosulu hicbir zaman saglanmayacagindan programin isletimi dongu atlanarak devam edecektir ;)


Yorum Yapın