Predict the output of below C programs.
Question 1
C
#include<stdio.h>
int main( void )
{
int a = 1;
int b = 0;
b = ++a + ++a;
printf ( "%d %d" ,a,b);
getchar ();
return 0;
}
|
Output: 3 6
Explanation: ++ has precedence over + and operates right to left. Hence rightmost ++a gives a=2 and the ++a left of it gives a=3. Now, while evaluating, b=3+3. As after the second ++a, we have a=3. Hence b=3+3=6 and a=3. Hence the output.
Question 2
C
#include<stdio.h>
int main()
{
int a[] = {1, 2, 3, 4, 5, 6};
int *ptr = ( int *)(&a+1);
printf ( "%d " , *(ptr-1) );
getchar ();
return 0;
}
|
Output: 6
&a is address of the whole array a[]. If we add 1 to &a, we get “base address of a[] + sizeof(a)”. And this value is typecasted to int *. So ptr – 1 points to last element of a[]
Please write comments if you find any of the answers/explanations incorrect, or you want to share more information about the topics discussed above.