Строка "01" преобразуется в массив символов (то есть, какие строки в C), а b [i] задает либо 0, либо 1, так что его "разложенный" вид будет таким.
"01"[0]
или
"01"[1]
Что бы выбрать "правильный" символ из строки "char" массива.Обратите внимание, что это возможно только из-за определения, что строка является указателем на символ.Таким образом, операция [...] становится операцией смещения памяти, равной размеру одного элемента типа указателя (в данном случае, одного символа).
Да, ваш printf был бы намного лучше,поскольку это требует меньше знаний о неясных уловках "с".