Note : All the
programs are tested under Turbo C/C++ compilers.
61) main()
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");
}
21 6/26/2004
21
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 whitespace)
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.
71) #include<stdio.h>
main()
{
const int i=4;
float j;
j = ++i;
printf("%d %f", i,++j);
}
Answer:
Compiler error
Explanation:
i is a constant. you cannot change the
value of constant
72) #include<stdio.h>
main()
{
int a[2][2][2] = { {10,2,3,4},
{5,6,7,8} };
int *p,*q;
p=&a[2][2][2];
*q=***a;
printf("%d..%d",*p,*q);
}
Answer:
garbagevalue..1
Explanation:
p=&a[2][2][2] you declare only two
2D arrays. but you are trying
to access the third 2D(which you are
not declared) it will print
garbage values. *q=***a starting
address of a is assigned integer
pointer. now q is pointing to starting
address of a.if you print *q
meAnswer:it will print first element
of 3D array.
73) #include<stdio.h>
main()
{
register i=5;
char j[]= "hello";
printf("%s %d",j,i);
}
Answer:
hello 5
Explanation:
if you declare i as register compiler
will treat it as ordinary integer
and it will take integer value. i
value may be stored either in
register or in memory.
74) main()
{
int i=5,j=6,z;
printf("%d",i+++j);
}
Answer:
11
Explanation:
the expression i+++j is treated as (i++ + j)
Last Updated Date: March 25, 2012
If you have any queries post it in Comments..