I found this piece of code on the site, it seems the author is long gone, anyway, I'm having hard time understanding the actual swap and how the reverse occurs:
void strrev2(char *str)
{
if( str == NULL )
return;
char *end_ptr = &str[strlen(str) - 1];
char temp;
while( end_ptr > str )
{
temp = *str;
*str++ = *end_ptr;
*end_ptr-- = temp;
}
}
let's say you feed it word "testing"
First iteration:
*end_ptr = 'g';
temp = 't'
*str = 'g' // is it first assigned and then incremented to point to the next location?
*end_ptr = 't' // is it first assigned and then decremented to point to the previous location?
What happens on the second iteration? I'm having hard time because I thought that on this line:
char *end_ptr = &str[strlen(str) - 1];
end_ptr
will only contain address of one letter, so how can *end_ptr
work?
Anyway, if someone can explain this to me in some graphical way.. Thanks.