61) main()
{
char
*cptr,c;
void
*vptr,v;
c=10; v=0;
cptr=&c;
vptr=&v;
printf("%c%v",c,v);
}
Answer:
Compiler
error (at line number 4): size of v is Unknown.
Explanation:
You can
create a variable of type void * but not of type void, since void is an empty
type. In the second line you are creating variable vptr of type void * and v of
type void hence an error.
62) main()
{
char
*str1="abcd";
char
str2[]="abcd";
printf("%d
%d %d",sizeof(str1),sizeof(str2),sizeof("abcd"));
}
Answer:
2
5 5
Explanation:
In first
sizeof, str1 is a character pointer so it gives you the size of the pointer
variable. In second sizeof the name str2 indicates the name of the array whose
size is 5 (including the '\0' termination character). The third sizeof is
similar to the second one.
63) main()
{
char
not;
not=!2;
printf("%d",not);
}
Answer:
0
Explanation:
! is a
logical operator. In C the value 0 is considered to be the boolean value FALSE,
and any non-zero value is considered to be the boolean value TRUE. Here 2 is a
non-zero value so TRUE. !TRUE is FALSE (0) so it prints 0.
64) #define
FALSE -1
#define
TRUE 1
#define
NULL 0
main()
{
if(NULL)
puts("NULL");
else if(FALSE)
puts("TRUE");
else
puts("FALSE");
}
Answer:
TRUE
Explanation:
The input
program to the compiler after processing by the preprocessor is,
main(){
if(0)
puts("NULL");
else if(-1)
puts("TRUE");
else
puts("FALSE");
}
Preprocessor
doesn't replace the values given inside the double quotes. The check by if
condition is boolean value false so it goes to else. In second if -1 is boolean
value true hence "TRUE" is printed.
65) main()
{
int
k=1;
printf("%d==1
is ""%s",k,k==1?"TRUE":"FALSE");
}
Answer:
1==1
is TRUE
Explanation:
When two
strings are placed together (or separated by white-space) they are concatenated
(this is called as "stringization" operation). So the string is as if
it is given as "%d==1 is %s". The conditional operator( ?: )
evaluates to "TRUE".
66) 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");
}
Answer:
2000
is a leap year
Explanation:
An
ordinary program to check if leap year or not.
67) #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);
}
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.
68) int
i=10;
main()
{
extern int i;
{
int i=20;
{
const volatile unsigned i=30;
printf("%d",i);
}
printf("%d",i);
}
printf("%d",i);
}
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.
69) main()
{
int *j;
{
int i=10;
j=&i;
}
printf("%d",*j);
}
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.
70) main()
{
int
i=-1;
-i;
printf("i
= %d, -i = %d \n",i,-i);
}
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.
No comments:
Post a Comment