Это образец фрагмента из книги.Я не понимаю, как это печатать строку в обратном порядке.При первом вызове reverse
элемент в 0 не является нулевым, если, конечно, была введена правильная строка.В операторе else
мы снова вызываем функцию, передавая адрес элемента с индексом 1.
Итак, допустим, я ввел "hello"
.Тогда я передаю адрес e
.Второй раз reverse
называется, однако, как проходит строка?Проверяемый индекс по-прежнему равен 1. Кроме того, мне кажется, мы не заменяем значения массива.Когда мы начинаем печатать значения с putchar
, я так растерялся, что значение с индексом 0 начинается с последнего элемента массива.Я понимаю, что когда мы используем рекурсию и достигаем базового случая, и поскольку элементы помещаются в стек, мы начинаем читать их с вершины указателя стека до конца, поэтому обратное.Но здесь я не вижу, что происходит.
Жестко закодированные индексы на
reverse( &ptr[1]);
putchar(ptr[0]);
не имеют смысла для меня.Я думаю, мне трудно увидеть, как проходит строка, когда каждый раз в рекурсии передается один и тот же адрес.Пожалуйста, помогите мне понять, что происходит.
Я немного изменил код для простоты, но он делает то же самое, что и в книге.
#include <stdio.h>
void reverse(char * ptr);
int main(){
char sentence[10];
printf("enter text \n");
fgets(sentence, 10, stdin);
printf("The line is: \n");
reverse(sentence);
return 0;
}
void reverse( char * ptr){
if(ptr[0] == '\0'){
return;
} else{
reverse( &ptr[1]);
putchar(ptr[0]);
printf("\n");
}
}