Я смотрел следующий код, который мне попался, для печати строки в обратном порядке в C с использованием рекурсии:
void ReversePrint(char *str) { //line 1
if(*str) { //line 2
ReversePrint(str+1); //line 3
putchar(*str); //line 4
}
}
Я относительно новичок в C и запутался в строке 2. *str
из моего понимания разыменовывает указатель и должен возвращать значение строки в текущей позиции. Но как это используется в качестве аргумента условного оператора (который должен исключать логическое право?)? В строке 3 указатель всегда будет увеличиваться до следующего блока (4 байта с момента его int)... так что не мог ли этот код выйти из строя, если в конце блока остались данные в следующем блоке памяти?
Обновить: значит, нет правильных логических типов в c? Условное выражение оценивается как "false", если значение равно 0, а "true" в противном случае?