Follow Me on Twitter

Sunday, October 25, 2009

Solutions to C Puzzles 2

2)The expected output of the following C program is to print the elements in the array. But when actually run, it doesn't do so.
  #include

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

int main()
{
int d;

for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);

return 0;
}
Find out what's going wrong.

Solution:
Sizeof Operator's return type is unsigned. When signed variable is compared with unsigned variable/value, the signed variable is promoted to unsigned.

So in the above case d=-1 and which be be promoted to unsigned value which become huge compared to (TOTAL_ELEMENTS-2) hence the condition will result in false and the loop won't be executed.

SO nothing gets printed.

No comments:

Post a Comment