1.
void main()
{
int const * p=5;
printf("%d",++(*p));
}
Answer:
Compiler error:
Cannot modify a constant value.
Explanation:
p is a pointer to a
"constant integer". But we tried to change the value of the
"constant integer".
2.
main()
{
char
s[ ]="man";
int
i;
for(i=0;s[
i ];i++)
printf("\n%c%c%c%c",s[
i ],*(s+i),*(i+s),i[s]);
}
Answer:
mmmm
aaaa
nnnn
Explanation:
s[i], *(i+s), *(s+i),
i[s] are all different ways of expressing the same idea. Generally array name is the base address for that
array. Here s is the base address. i is the index number/displacement
from the base address. So, in-directing it with * is same as s[i]. i[s] may be
surprising. But in the case of C it
is same as s[i].
3.
main()
{
float
me = 1.1;
double
you = 1.1;
if(me==you)
printf("I
love U");
else
printf("I
hate U");
}
Answer:
I
hate U
Explanation:
For floating point
numbers (float, double, long double) the values cannot be
predicted exactly. Depending on the number of bytes, the precession with of the
value represented varies. Float takes 4
bytes and long double takes 10 bytes. So float stores 0.9 with less precision
than long double.
Rule of Thumb:
Never compare or
at-least be cautious when using floating point numbers with relational
operators (== , >, <, <=, >=,!= ) .
4.
main()
{
static
int var = 5;
printf("%d
",var--);
if(var)
main();
}
Answer:
5
4 3 2 1
Explanation:
When static
storage class is given, it is initialized once. The change in the value of a static
variable is retained even between the function calls. Main is also treated
like any other ordinary function, which can be called recursively.
5.
main()
{
int c[ ]={2.8,3.4,4,6.7,5};
int j,*p=c,*q=c;
for(j=0;j<5;j++) {
printf("
%d ",*c);
++q; }
for(j=0;j<5;j++){
printf("
%d ",*p);
++p; }
}
Answer:
2 2 2 2 2 2 3 4 6 5
Explanation:
Initially pointer c
is assigned to both p and q. In the first loop, since only q
is incremented and not c , the value 2 will be printed 5 times. In second loop p
itself is incremented. So the values 2 3 4 6 5 will be printed.
No comments:
Post a Comment