C Bulmaca – 1
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.
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