lcd_char() puts a single character code on the LCD data lines then operates the control lines to write it to the LCD module. If the delay(10); is 10mS it can be considerably shortened!
lcd_string() takes the string and keeps callling lcd_char, passing it one character from the string at a time until it finds a NUL (zero) character. Strings in 'C' are stored with a NUL at their end so it uses it as a marker to say 'no more' after all the characters have been displayed.
To be more clear, it sends the character (dereferenced by the pointer 'p') and then increments the pointer 'p' (post-incrementing), after this 'p' points to the next character.