Я нашел этот фрагмент кода на сайте, кажется, что автора давно уже нет, так или иначе, мне трудно понять фактический обмен и как происходит обратное:
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;
}
}
допустим, вы кормите его словом "тестирование"
Первая итерация:
*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?
Что происходит на второй итерации? У меня трудное время, потому что я думал, что в этой строке:
char *end_ptr = &str[strlen(str) - 1];
end_ptr
будет содержать только адрес одной буквы, так как *end_ptr
может работать?
Во всяком случае, если кто-то сможет объяснить мне это каким-то графическим способом ...
Спасибо.