Это не имеет ничего общего с путчаром, оно имеет отношение к рекурсии.
Скажем, вы даете ей строку "1234"
- или давайте назовем ее ['1','2','3','4','\0']
В первый раз вызывается реверс, он вызывается с аргументом sptr, указывающим на ['1','2','3','4','\0']
;
Выполнение достигает рекурсивного вызова реверса, и на этот раз используется смещение 1, поэтому аргумент становится ['2','3','4','\0']
Процесс повторяется до тех пор, пока не будет найден '\0'
, и теперь функция возвращается к предыдущему вызывающему, который печатает последний символ, возвращает к предыдущему вызывающему, который печатает 2-й последний символ и так далее до тех пор, пока не будет выполнен обратный вызов сверху. достигается, который печатает первый символ, а затем существует.
Возможно, распечатка дополнительной отладочной информации облегчит понимание.
#include <stdio.h>
void reverse(const char *const sptr);
int recursion_level;
int main()
{
recursion_level=0;
char sentence[80]="1234";
// printf("Enter a line of text:\n");
// gets(sentence);
printf("\nThe reversed version:\n");
reverse(sentence);
puts("");
return 0;
}
void reverse(const char *const sptr)
{
recursion_level++;
printf("reverse entered, recursion level:%d , sptr:%s \n",recursion_level, sptr);
if(sptr[0] == '\0')
{ recursion_level--;
return;
}
else{
reverse(&sptr[1]);
putchar(sptr[0]);
}
printf("\n reverse exits, recursion level:%d , \n",recursion_level);
recursion_level--;
}
, который генерирует следующий вывод
The reversed version:
reverse entered, recursion level:1 , sptr:1234
reverse entered, recursion level:2 , sptr:234
reverse entered, recursion level:3 , sptr:34
reverse entered, recursion level:4 , sptr:4
reverse entered, recursion level:5 , sptr:
4
reverse exits, recursion level:4 ,
3
reverse exits, recursion level:3 ,
2
reverse exits, recursion level:2 ,
1
reverse exits, recursion level:1 ,