Translate

Labels

Monday 25 March 2013

C PUZZLE


  •     main(){

int i=-1;
-i;
printf("i = %d, -i = %d \n",i,-i);
      }
Answer:
i = -1, -i = 1
Explanation:
-i is executed and this execution doesn't affect the value of i. In printf first you just print the value of i. After that the value of the expression -i = -(-1) is printed.

  •   main() {

const int i=4;
float j;
j = ++i;
printf("%d  %f", i,++j);
 }
Answer:
Compiler error
      Explanation:
i is a constant. you cannot change the value of constant

  •    main(){

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

  •   main() {

register i=5;
char j[]= "hello";                    
printf("%s  %d",j,i);
}
Answer:
hello 5
Explanation:
if you declare i as register  compiler will treat it as ordinary integer and it will take integer value. i value may be  stored  either in register  or in memory.

  •   main(){

int i=5,j=6,z;
printf("%d",i+++j);
       }
Answer:
11
Explanation:
The expression i+++j is treated as (i++ + j).
       
  •    struct aaa{

struct aaa *prev;
int i;
struct aaa *next;
};
67main(){
struct aaa abc,def,ghi,jkl;
int x=100;
abc.i=0;abc.prev=&jkl;
abc.next=&def;
def.i=1;def.prev=&abc;def.next=&ghi;
ghi.i=2;ghi.prev=&def;
ghi.next=&jkl;
jkl.i=3;jkl.prev=&ghi;jkl.next=&abc;
x=abc.next->next->prev->next->i;
      printf("%d",x);
}
Answer:
2
Explanation:
            above all statements form a double circular linked list;
abc.next->next->prev->next->i
this one points to "ghi" node the value of at particular node is 2.

  •    struct point{

int x;
int y;
};
struct point origin,*pp;
main(){
pp=&origin;
printf("origin is(%d%d)\n",(*pp).x,(*pp).y);
printf("origin is (%d%d)\n",pp->x,pp->y);
}    
Answer:
origin is(0,0)
origin is(0,0)
Explanation:
pp is a pointer to structure. we can access the elements of the structure either with arrow mark or with indirection operator.
Note:
Since structure point  is globally declared x & y are initialized as zeroes
           
  •    main(){

int i=_l_abc(10);
printf("%d\n",--i);
}
int _l_abc(int i){
return(i++);
}
Answer:
9
Explanation:
return(i++) it will first return i and then increments. i.e. 10 will be returned.

  •    main(){

char *p;
int *q;
long *r;
p=q=r=0;
p++;
q++;
r++;
printf("%p...%p...%p",p,q,r);
}
Answer:
0001...0002...0004
Explanation:
++ operator  when applied to pointers increments address according to their corresponding data-types.

No comments: