Не понимаю, почему переменная-указатель типа char, в которой, как сказано в определении, хранится адрес какой-либо ячейки памяти, выводит строку текста

Выводится строка, потому что в первом параметре функции printf ты указываешь
"%s", таким образом функция считает что передаваемый указатель указывает на начало
С-строки. Так уж реализована эта функция... Если передашь параметр "%u", то получишь собственно
адрес, который хранится в переменной string, а при "%x" то же но 16-ом представлении.