Когда я создаю char name[] = "John" и пытаюсь разыменовать *name то получаю J. Это значит name сам по себе это адрес? Если да, то адрес чего? Насколько я знаю, если оператор << видит тип char *, то вместо адреса он выводит С-строку. Поэтому ссылаюсь на то, что выводит мне << , не зная тонкостей. Можно ли обьяснение как устроен массив типа char
Как и любой другой массив - подряд в памяти расположены элементы типа char. Имя массива выступает неизменяемым указателем (вы не можете заставить ваше name указывать на другой массив) на первый элемент массива.
Поэтому *name означает сам первый элемент массива с типом char.
Ну, а в С++ организовано так, что cout выполняет вывод, основываясь на типе выводимого, и, видя char*, он выводит переданное как строку в стиле С (которая представляет собой массив символов; для указания завершения строки (не самого массива - в массиве в 1000 элементов может располагаться слово из 3 букв) используется не выводимый нулевой символ (не '0', а именно 0 (ну, или '\0' - как вам удобнее записывать)).
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости