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