The Whole File:-C Questions with Explanations

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, indirecting 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”);

1

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.

*****Many More*****