Как устроен массива типа char?

137
20 августа 2019, 07:40

Когда я создаю char name[] = "John" и пытаюсь разыменовать *name то получаю J. Это значит name сам по себе это адрес? Если да, то адрес чего? Насколько я знаю, если оператор << видит тип char *, то вместо адреса он выводит С-строку. Поэтому ссылаюсь на то, что выводит мне << , не зная тонкостей. Можно ли обьяснение как устроен массив типа char

Answer 1

Как и любой другой массив - подряд в памяти расположены элементы типа char. Имя массива выступает неизменяемым указателем (вы не можете заставить ваше name указывать на другой массив) на первый элемент массива.

Поэтому *name означает сам первый элемент массива с типом char.

Ну, а в С++ организовано так, что cout выполняет вывод, основываясь на типе выводимого, и, видя char*, он выводит переданное как строку в стиле С (которая представляет собой массив символов; для указания завершения строки (не самого массива - в массиве в 1000 элементов может располагаться слово из 3 букв) используется не выводимый нулевой символ (не '0', а именно 0 (ну, или '\0' - как вам удобнее записывать)).

READ ALSO
Производительность команд &lt; и &lt;=

Производительность команд < и <=

Давно мучаюсь вопросом есть ли различия между командами меньше и меньше или равно на низком уровне в плане количества команд и производительности?

82
В чем разница типов BOOL и bool?

В чем разница типов BOOL и bool?

В чём разница типов BOOL и bool?

97
Как можно развернуть данную рекурсию?

Как можно развернуть данную рекурсию?

Задача в том, чтобы быстро находить n-тый член последовательности Голомба

107