Tuesday 24 January 2012

Frequently Asked Questions in Technical Round at MNCs like TCS, WIPRO, INFOSYS,..etc – 5

Predict the output or error(s) for the following:


1)

main( )

{

 static int  a[ ]   = {0,1,2,3,4};


 int  *p[ ] = {a,a+1,a+2,a+3,a+4};


 int  **ptr =  p;


 ptr++;


 printf(“\n %d  %d  %d”, ptr-p, *ptr-a, **ptr);


 *ptr++;


 printf(“\n %d  %d  %d”, ptr-p, *ptr-a, **ptr);


 *++ptr;


 printf(“\n %d  %d  %d”, ptr-p, *ptr-a, **ptr);


 ++*ptr;


printf(“\n %d  %d  %d”, ptr-p, *ptr-a, **ptr);


}

Answer:

111


222


333


344


Explanation:


Let us consider the array and the two pointers with some address



After execution of the instruction ptr++ value in ptr becomes 1002, if scaling factor for integer is 2 bytes. Now ptr – p is value in ptr – starting location of array p, (1002 – 1000) / (scaling factor) = 1,  *ptr – a = value at address pointed by ptr – starting value of array a, 1002 has a value 102  so the value is (102 – 100)/(scaling factor) = 1,  **ptr is the value stored in the location pointed by  the pointer of ptr = value pointed by value pointed by 1002 = value pointed by 102 = 1. Hence the output of the firs printf is  1, 1, 1.


After execution of *ptr++ increments value of the value in ptr by scaling factor, so it becomes1004. Hence, the outputs for the second printf are ptr – p = 2, *ptr – a = 2, **ptr = 2.


After execution of *++ptr increments value of the value in ptr by scaling factor, so it becomes1004. Hence, the outputs for the third printf are ptr – p = 3, *ptr – a = 3, **ptr = 3.


After execution of ++*ptr value in ptr remains the same, the value pointed by the value is incremented by the scaling factor. So the value in array p at location 1006 changes from 106 10 108,. Hence, the outputs for the fourth printf are ptr – p = 1006 – 1000 = 3, *ptr – a = 108 – 100 = 4, **ptr = 4.


2)

main( )

{

int a[ ] = {10,20,30,40,50},j,*p;


for(j=0; j<5; j++)


{


printf(“%d” ,*a);


a++;


}


p = a;


for(j=0; j<5; j++)


{


printf(“%d ” ,*p);


p++;


}


 }

Answer:

Compiler error: lvalue required.


Explanation:

Error is in line with statement a++. The operand must be an lvalue and may be of any of scalar type for the any operator, array name only when subscripted is an lvalue. Simply array name is a non-modifiable lvalue.

No comments:

Post a Comment