Wednesday, 23 July 2014

#20. Concepts in C -- only through Examples & Explanations

This is a continuation of last post. 

Before seeing the answer try to predict it & then see the explanation.

All the Best!!

61) main()
{
int y;
scanf("%d",&y); // input given is 2000
if( (y%4==0 && y%100 != 0) || y%100 == 0 )
printf("%d is a leap year");
else
printf("%d is not a leap year");
}

62) #define max 5
#define int arr1[max]
main()
{
typedef char arr2[max];
arr1 list={0,1,2,3,4};
arr2 name="name";
printf("%d %s",list[0],name);
}

63) int i=10;
main()
{
extern int i;
{
int i=20;
{
const volatile unsigned i=30;
printf("%d",i);
}
printf("%d",i);
}
printf("%d",i);
}

64) main()
{
int *j;
{
int i=10;
j=&i;
}
printf("%d",*j);
}

65) main()
{
int i=-1;
-i;
printf("i = %d, -i = %d \n",i,-i);
}


========================================================

61.
Answer:
2000 is a leap year
Explanation:
An ordinary program to check if leap year or not.

62.
Answer:
Compiler error (in the line arr1 list = {0,1,2,3,4})
Explanation:
arr2 is declared of type array of size 5 of characters. So it can be used to
declare the variable name of the type arr2. But it is not the case of arr1.
Hence an error.
Rule of Thumb:
#defines are used for textual replacement whereas typedefs are used for
declaring new types.

63.
Answer:
30,20,10
Explanation:
'{' introduces new block and thus new scope. In the innermost block i is
declared as,
const volatile unsigned
which is a valid declaration. i is assumed of type int. So printf prints 30. In the
next block, i has value 20 and so printf prints 20. In the outermost block, i is
declared as extern, so no storage space is allocated for it. After compilation
is over the linker resolves it to global variable i (since it is the only variable
visible there). So it prints i's value as 10.

64.
Answer:
10
Explanation:
The variable i is a block level variable and the visibility is inside that block
only. But the lifetime of i is lifetime of the function so it lives upto the exit of
main function. Since the i is still allocated space, *j prints the value stored in i
since j points i.

65.
Answer:
i = -1, -i = 1
Explanation:
-i is executed and this execution doesn't affect the value of i. In printf first you
just print the value of i. After that the value of the expression -i = -(-1) is
printed.

To be continued...
========================================================

Thanks for coming till this point!!
VSG
SQL DBA

No comments:

Post a Comment