Note : All the
programs are tested under Turbo C/C+ compilers.
1.
main()
{
char *p;
p="Hello";
printf("%c\n",*&*p);
}
Answer:
H
Explanation:
* is a
dereference operator & is a reference operator. They can be
applied
any number of times provided it is meaningful. Here p
points to
the first character in the string "Hello". *p dereferences it
and so its
value is H. Again & references it to an address and *
dereferences
it to the value H.
2)
main()
{
int i=1;
while
(i<=5)
{
printf("%d",i);
if
(i>2)
goto here;
i++;
}
}
fun()
{
here:
printf("PP");
}
Answer:
Compiler
error: Undefined label 'here' in function main
Explanation:
Labels
have functions scope, in other words the scope of the labels
is limited
to functions. The label 'here' is available in function fun()
Hence it
is not visible in function main.
3)
main()
{
static
char
names[5][20]={"pascal","ada","cobol","fortran","perl"};
int i;
char *t;
t=names[3];
names[3]=names[4];
names[4]=t;
for
(i=0;i<=4;i++)
printf("%s",names[i]);
}
Answer:
Compiler
error: Lvalue required in function main
Explanation:
Array
names are pointer constants. So it cannot be modified.
4)
void main()
{
int i=5;
printf("%d",i++
+ ++i);
}
Answer:
Output
Cannot be predicted exactly.
Explanation:
Side
effects are involved in the evaluation of i
5)
void
main()
{
int i=5;
printf("%d",i+++++i);
}
Answer:
Compiler
Error
Explanation:
The
expression i+++++i is parsed as i ++ ++ + i which is an
illegal
combination of operators.
6)
#include<stdio.h>
main()
{
int
i=1,j=2;
switch(i)
{
case 1:
printf("GOOD");
break;
case j:
printf("BAD");
break;
}
}
Answer:
Compiler
Error: Constant expression required in function main.
Explanation:
The
case statement can have only constant expressions (this
implies
that we cannot use variable names directly so an error).
Note:
Enumerated
types can be used in case statements.
7) main()
{
int i;
printf("%d",scanf("%d",&i));
// value 10 is given as input here
}
Answer:
1
Explanation:
Scanf
returns number of items successfully read and not 1/0. Here
10 is
given as input which should have been scanned successfully.
So number
of items read is 1.
8)
#define f(g,g2) g##g2
main()
{
int
var12=100;
printf("%d",f(var,12));
}
Answer:
100
9)
main()
{
int i=0;
for(;i++;printf("%d",i))
;
printf("%d",i);
}
Answer:
1
Explanation:
before
entering into the for loop the checking condition is
"evaluated".
Here it evaluates to 0 (false) and comes out of the
loop, and
i is incremented (note the semicolon after the for loop).
10)
#include<stdio.h>
main()
{
char
s[]={'a','b','c','\n','c','\0'};
char
*p,*str,*str1;
p=&s[3];
str=p;
str1=s;
printf("%d",++*p
+ ++*str1-32);
}
Answer:
M
Explanation:
p
is pointing to character '\n'.str1 is pointing to character 'a' ++*p
meAnswer:"p
is pointing to '\n' and that is incremented by one."
the ASCII
value of '\n' is 10. then it is incremented to 11. the value
of ++*p is
11. ++*str1 meAnswer:"str1 is pointing to 'a' that is
incremented
by 1 and it becomes 'b'. ASCII value of 'b' is 98. both
11 and 98
is added and result is subtracted from 32.
i.e.
(11+98-32)=77("M");
11)
#include<stdio.h>
main()
{
struct xx
{
int x=3;
char
name[]="hello";
};
struct xx
*s=malloc(sizeof(struct xx));
printf("%d",s->x);
printf("%s",s->name);
}
Answer:
Compiler
Error
Explanation:
Initialization
should not be done for structure members inside the
structure
declaration
12)
#include<stdio.h>
main()
{
struct xx
{
int x;
struct yy
{
char s;
struct xx
*p;
};
struct yy
*q;
};
}
Answer:
Compiler
Error
Explanation:
in
the end of nested structure yy a member have to be declared.
13) main()
{
extern int
i;
i=20;
printf("%d",sizeof(i));
}
Answer:
Linker
error: undefined symbol '_i'.
Explanation:
extern
declaration specifies that the variable i is defined
somewhere
else. The compiler passes the external variable to be
resolved
by the linker. So compiler doesn't find an error. During
linking
the linker searches for the definition of i. Since it is not
found the
linker flags an error.
14) main()
{
printf("%d",
out);
}
int
out=100;
Answer:
Compiler
error: undefined symbol out in function main.
Explanation:
The
rule is that a variable is available for use from the point of
declaration.
Even though a is a global variable, it is not available
for main.
Hence an error.
15)
main()
{
extern
out;
printf("%d",
out);
}
int
out=100;
Answer:
100
Explanation:
This
is the correct way of writing the previous program.
Last Updated Date: March 23, 2012
If you have any queries post it in Comments..