1.Всегда строковая константа заканчивается нулевым значением ('\ 0'). Если вам не нужно это значение Null, вы можете присвоить значение следующим образом
char s1 [3] = {'a', 'b', 'c'};
2. Выше заявления вы делаете явное приведение типов! Вы конвертируете массив символов в пустой указатель. И WKT, char имеет размер 1. Так что адрес был увеличен на единицу. И к вашему сведению, Notaion имени массива, такого как 's', равен & s [0]. (Адрес первого индекса), а также равен адресу имени массива (& s) ..
[s == & s == & s [0]]
И мы знаем, что указатель void может содержать адрес любого типа и может быть напечатан для любого типа. Но при преобразовании символа в указатель void мы видим только преобразование адреса. Потому что & s и s содержит только адрес первого символа. Кроме того, cout не признает, что значение является символьным значением.