О вашем первом вопросе о том, почему while
не работает, давайте посмотрим, как работает код в этом случае
Начнем с простого примера. Допустим, что для простоты наш char[]
равен GH\0
,
Ну, это немного сложно объяснить, но давайте попробуем
сначала вызывается back
, а k
указывает на G
, так как он не \0
, back
вызывается снова с k
, являющимся ++
ed, поэтому он указывает на 'H' и снова это не \0
, поэтому back
вызывается с другим ++k
, в котором это время равно \0
, поэтому while
не выполняется и printf
выполняет свою работу, теперь выполнение возвращается ко второму back
вызов, где он был вызван с H
вводом, но когда мы ++
его редактировали, мы переместили его в стек и теперь он снова указывает на \0
, поэтому второй printf
запускается, теперь только первый back
вызов остался, угадайте, куда k
указывает? верно, он указывает на H
(не забывайте ++
), поэтому снова выполняется while
, но ввод ++k
, что, в свою очередь, \0
, поэтому новый вызываемый back
немедленно возвращается с printf
, снова мы находимся в первом back
вызове, но на этот раз указывает на \0
, поэтому еще один printf
, и мы закончили,
чтобы лучше понять последовательность, я предлагаю запустить этот код
#include <stdio.h>
#include <stdlib.h>
void back(char*k)
{
printf("%c",'O');
while(*k) //->not work??
{
back(++k);
}
printf("%c",'f');
}
int main()
{
char k[]="he";
back(k);
return 0;
}
ожидаемый выход - OOOffOff