Подумайте, что такое память: непрерывный блок единиц байтового размера, который может быть заполнен любыми битовыми комбинациями.
2a c6 90 f6
Символ - это просто одна из этих битовых комбинаций. Его значение как строки определяется как вы относитесь к нему. Если вы посмотрели на ту же часть памяти, но с использованием представления integer (или другого типа), вы получите другое значение.
Если у вас есть переменная, которая является указателем на начало группы символов в памяти, вы должны знать, когда эта строка заканчивается и начинается следующий фрагмент данных (или мусор).
Пример
Давайте посмотрим на эту строку в памяти ...
H e l l o , w o r l d ! \0
^
|
+------ Pointer to string
... мы видим, что строка логически заканчивается после символа !
. Если бы не было \0
(или какого-либо другого метода определения его конца), как бы мы узнали, ища в памяти, что мы закончили с этой строкой? Другие языки содержат длину строки с типом string , чтобы решить эту проблему.
Я задал этот вопрос, когда мои базовые знания о компьютерах были ограничены, и этот - это ответ, который помог бы много лет назад. Я надеюсь, что это помогает кому-то еще. :)