10,521 views

Consider the following C program:

#include <stdio.h>
int main()
{
int a[] = {2, 4, 6, 8, 10};
int i, sum=0, *b=a+4;
for (i=0; i<5; i++)
sum=sum+(*b-i)-*(b-i);
printf("%d\n", sum);
return 0;
}

The output of the above C program is _______

$\text{sum}=0, *b = a+4 \text{ i.e.pointing to }10$

$\text{sum}= \text{sum}+ (*b-i) - *(b-i)$

$i=0$
$\text{sum}= 0+ (10-0) - (10) = 0$

$i=1$
$\text{sum}= 0 + (10-1) - (8) = 1$

$i=2$
$\text{sum}= 1 + (10-2) - (6) = 3$

$i=3$
$\text{sum}= 3 + (10-3) - (4) = 6$

$i=4$
$\text{sum}= 6 + (10-4) - (2) = 10$

### 1 comment

For i=4,
You took sum = 7 while in i=3 sum is 6
#include <stdio.h>
int main()
{
int a[] = {2, 4, 6, 8, 10};
int i, sum=0, *b=a+4; /* Here b points to the address of a[4]=10 */

/*  *b means the value of which the address b points to. */
/*  So *b = a[4] = 10 */

/*  (b-1) means &a[4-1], so *(b-1)=a[4-1]=8  */
/*  (b-2) means &a[4-2], so *(b-2)=a[4-2]=6  */
/*  and so on.  */

for (i=0; i<5; i++)
sum=sum+(*b-i)-*(b-i); /* sum=0+(10-0)-(10) = 0 */
/* sum=0+(10-1)-(8) = 1 */
/* sum=1+(10-2)-(6) = 3 */
/* sum=3+(10-3)-(4) = 6 */
/* sum=6+(10-4)-(2) = 10 */

printf("%d\n", sum);       /* It will give the output as 10. */
return 0;
}

So the correct answer is $10$.

@Sachin Mittal 1sum=sum+(*b-i) - *(b-i)  in this line how this  *(b-i) will be zero.  *(10-0)  = *10 but at 10 place there is no value so 0  10-0=10   where i am wrong?

@jugnu1337 $\ *b = a+4 \text{ i.e.pointing to }10$, hence *b is not *10 but only 10.

Now, in *(b-i), here b’s address is subtracted with 0, leaving only b’s address. Thus *(b-i) = 10 not *10.

1
8,515 views