Code:
char *c[]={"ENTNG","NST","AMAZI","FIRBE"};
This is an array of pointers to characters, being initialized with string literals.
Code:
char **cp[]={c+3,c+2,c+1,c};
This is an array of pointers-to-pointers to characters, being initialized with values from the previous line.
This is a pointer to a pointer to a pointer to a character, pointing to the first element of the previous line's array.
This is wrong.
Code:
printf("%s",**++cpp);
This dereferences a pointer to a pointer to a character twice, and increments the pointer.
Code:
printf("%s",*--*++cpp+3);
This should be undefined behavior, and as such, it doesn't matter what output you happen to get. If it's not undefined behavior, it's an ugly piece of code, and no one in their right mind would program like this, and that's what you should write as your answer.
Code:
printf("%s",*cpp[-2]+3);
Using a negative array index tells me that you are doing something wrong, I have never had occasion to use a negative array index. Combine with the previous line, whatever it gives you is beyond my caring. (Yeah, I know, it's supposed to be tricky or cool, but it's crap. No one programs that way, or if they do, they shouldn't.)
Code:
printf("%s",cpp[-1][-1]+1);
See above.
Quzah.