Если вы вызываете foo3("hi")
, первое, что он делает, это смотрит на 'h', на который указывает параметр x
. Так как это не ноль, он вызывает foo3("i")
- это означает, что он передает адрес остальной части строки .
foo3("i")
смотрит на 'i', видит, что он ненулевой, и вызывает foo3("")
- технически он передает адрес нулевого терминатора в исходную строку.
foo3("")
смотрит на нулевой терминатор и возвращает.
foo3("i")
печатает 'i' и возвращает.
foo3("hi")
печатает 'h'.
Функция работает, потому что она делает рекурсивный вызов перед печатью «текущего символа», так что остальная часть строки будет напечатана перед ним.