Translate

Labels

Monday 25 March 2013

C PUZZLE


  •    main(){

            char string[]="Hello World";
            display(string);
}
void display(char *string){
printf("%s",string);
}
          Answer:
Compiler Error : Type mismatch in redeclaration of function display
          Explanation :
In third line, when the function display is encountered, the compiler doesn't know anything about the function display. It assumes the arguments and return types to be integers, (which is the default type). When it sees the actual function display, the arguments and type contradicts with what it has assumed previously. Hence a compile time error occurs.

  •   main(){

            int c=- -2;
      printf("c=%d",c);
}
Answer:
                        c=2;
            Explanation:
Here unary minus (or negation) operator is used twice. Same maths  rules applies, ie. minus * minus= plus.
Note:
However you cannot give like --2. Because -- operator can  only be applied to variables as a decrement operator (eg., i--). 2 is a constant and not a variable.

  •   #define int char

main(){
      int i=65;
            printf("sizeof(i)=%d",sizeof(i));
}
Answer:
                  sizeof(i)=1
Explanation:
Since the #define replaces the string  int by the macro char

  •    main(){

int i=10;
i=!i>14;
printf("i=%d",i);
}
Answer:
i=0
      Explanation:
In the expression !i>14, NOT (!) operator has more precedence than ‘ >’ symbol. ! is a unary logical operator. !i (!10) is 0 (not of true is false).  0>14 is false (zero).

  •    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:
77   
Explanation:
p is pointing to character '\n'. str1 is pointing to character 'a' ++*p. "p is pointing to '\n' and that is incremented by one." the ASCII value of '\n' is 10, which is then incremented to 11. The value of ++*p is 11. ++*str1, str1 is pointing to 'a' that is incremented by 1 and it becomes 'b'. ASCII value of 'b' is 98.
 Now performing (11 + 98 – 32), we get 77 (77 is the ASCII value for "M");
 So we get the output 77.

  •   main(){

int a[2][2][2] = { {1,2,3,4}, {5,6,7,8}  };
int *p,*q;
p=&a[2][2][2];
*q=***a;
printf("%d----%d",*p,*q);
}
Answer:
SomeGarbageValue---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, it will print first element of 3D array.
     
  •   main(){

struct xx{
char name[]="hello";
};
struct xx *s;
printf("%s",s->name);
}
      Answer:
Compiler Error
Explanation:
You should not initialize variables in structure declaration.

  •    main(){

struct xx{
int x;
struct yy{
char s;
struct xx *p;
};
struct yy *q;
};
}
Answer:
No output.
Explanation:
Pointer to the same type of structures are known as self referential structures. They are particularly used in implementing datastructures like trees. Structures within structures are known as nested structures.

  •   main()

{
printf("\nab");
printf("\bsi");
printf("\rha");
}
Answer:
hai
Explanation:
\n  - newline
\b  - backspace
\r  - linefeed

  •   main()

{
int i=5;
printf("%d%d%d%d%d",i++,i--,++i,--i,i);
}
Answer:
45545
Explanation:
The arguments in a function call are pushed into the stack from left to right. The evaluation is by popping out from the stack. and the  evaluation is from right to left, hence the result.

No comments: