получаем ли мы прямой указатель на заголовок, даже если заголовок не объявлен как указатель внутри структуры?
Чтобы полностью понять ответ на этот вопрос, вам необходимо понять, как данные хранятся в памяти.
По сути (для простоты) у компьютера есть ряды блоков памяти, у каждой части есть адрес (как у ряда домов). Одна переменная (например, char A;) имеет только один дом и, таким образом, является статическим адресом. Массив переменных (например, char Arr [10]) имеет несколько домов (все в ряд), но сам массив (указатель) может указывать только на один дом за один раз.
Немного похоже на использование ленты. Поэтому, когда вы говорите Array [1], вы на самом деле говорите: «относительно первого дома [0], переходите к следующему дому [1]» (или, более технически, адрес памяти плюс размер указателя, умноженный на то, как много блоков, которые вы хотите пройти мимо).
Сканирует ли scanf () адрес указателя структуры, а затем осуществляет доступ к члену или это адрес члена структуры "rating"?
Это адрес члена структуры, рейтинг. Обычно для пояснения разыменования можно использовать скобки, поэтому & (current-> rating), а не проходящий ток (& current), но обычно компиляторы знают, что происходит разыменование, хотя брекетинг может помочь, если есть проблема.
Почему бы просто не передать указатель аналогично strcopy ()?
Массив технически является указателем (сортировка нескольких домов), где рейтинг не имеет указателя (один дом, не нужен). Если бы у вас был массив целых чисел, вы бы смогли это сделать.