C interview questions

void 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.

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.

main()
{
      int i=5;
      printf("%d",i++ + ++i);
}

Answer:
     Output Cannot be predicted exactly.
Explanation:
     Side effects are involved in the evaluation of i

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.

#include
void 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.

void 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.

#define f(g,g2) g##g2
void main()
{
      int var12=100;
      printf("%d",f(var,12));
}

Answer:
     100

void 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).

#include
void 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");

#include
void 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

Google