2015-01-11 2 views
-7
int main() 

{ 

    int i; 

    char *names[5] = {"Miri", "Tali", "Ronit", "Avigail", "Shlomit"}; 

    //Printing all the names: 

    for (i=0; i<5; i++) 

     printf("%s\n" , names[i]); 

    return 0; 

} 

Как его напечатать полное название? например, имена [0] (например) не должны печатать только M?Размер указателя поворота

ответ

3

names - массив указателей символов. Таким образом, names[0] является char *, указывая на "Miri". И аналогично для других последующих предметов.

+0

Итак, компилятор назначает массив символов для сохранения всех букв, а затем присваивает указателю первую букву в качестве указателя на имя? – newhere

+1

@ в другом месте, как правило, компилятор будет хранить '' Miri'' и другие строки в памяти и инициализировать массив этими указателями. Но фактическая реализация зависит от компилятора. – Rohan

+0

Для дополнительного удовольствия подумайте, что эти строковые литералы на самом деле неизменяемы, хотя их тип - 'char [*]', и они могут совместно использовать пространство. – Deduplicator

0

В программе 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, вы избегаете этого.

Смежные вопросы