В программе names
представляет собой массив указателей на char
, как уже было упомянуто в ответ Rohan «s, так, чтобы напечатать первый символ, который вы должны сначала получить доступ к элементу массива, а затем 0
й символ
printf("%c\n", names[i][0]);
также отметить, что соответствующий спецификатор "%c"
для одного символа, так как "%s"
ожидает указатель на char
, который должен указывать на оканчивающихся нулем последовательность байт, то есть строки.
Aditionally вы должны объявить массив как
const char *names[5] = {"Miri", "Tali", "Ronit", "Avigail", "Shlomit"};
, так как элементы являются строковые литералы, и не должны быть изменены. Поэтому, используя спецификатор const
, вы избегаете этого.
Итак, компилятор назначает массив символов для сохранения всех букв, а затем присваивает указателю первую букву в качестве указателя на имя? – newhere
@ в другом месте, как правило, компилятор будет хранить '' Miri'' и другие строки в памяти и инициализировать массив этими указателями. Но фактическая реализация зависит от компилятора. – Rohan
Для дополнительного удовольствия подумайте, что эти строковые литералы на самом деле неизменяемы, хотя их тип - 'char [*]', и они могут совместно использовать пространство. – Deduplicator