Tuesday, 29 November 2011

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

main()

{

char *p="hai friends",*p1;


p1=p;


while(*p!='\0') ++*p++;


printf("%s   %s",p,p1);


}

Answer:

ibj!gsjfoet


Explanation:

                        ++*p++ will be parse in the given order

  • *p that is value at the location currently pointed by p will be taken

  • ++*p the retrieved value will be incremented

  • when ; is encountered the location will be incremented that is p++ will be executed


Hence, in the while loop initial value pointed by p is ‘h’, which is changed to ‘i’ by executing ++*p and pointer moves to point, ‘a’ which is similarly changed to ‘b’ and so on. Similarly blank space is converted to ‘!’. Thus, we obtain value in p becomes “ibj!gsjfoet” and since p reaches ‘\0’ and p1 points to p thus p1 does not print anything.

1 comment: