2014-11-25 2 views
0

Это из следующей веб-странице: http://c.learncodethehardway.org/book/ex16.htmlStruct ключевое слово внутри структуры декларации

....deleted code 

struct Person { 
    char *name; 
    int age; 
    int height; 
    int weight; 
}; 

struct Person *Person_create(char *name, int age, int height, int weight) 
{ 
struct Person *who = malloc(sizeof(struct Person)); 
assert(who != NULL); 

who->name = strdup(name); 
who->age = age; 
who->height = height; 
who->weight = weight; 

return who; 
} 

[Rest of code not shown] 

Я не могу понять заявление «STRUCT Person * кто = таНос (SizeOf (структура Person));

Это утверждение внутри структуры Person * функция Person_create. Так что же такое структура Person * кто делает?

ответ

0

в отличие от других языков, необходимо префикс struct с struct ключевое слово каждый раз, если вы не typedefstruct. Поэтому struct Person *who - это просто объявление указателя с именем who to struct Person.

0

malloc (sizeof (struct Person)) выделяет блок памяти на основе размера struct 'Person' и возвращает указатель на начало нового блока памяти на * who.

0

'who' является лишь временным указателем типа struct person, который указывает на блок памяти. Так malloc (sizeof (struct Person) создает этот блок и присваивает свой адрес «кому». Теперь, чтобы получить доступ к каждому элементу внутри этого блока, who-> name будет указателем элемента имени этого блока и так далее. Указатель «кто» возвращается в конце для любых дальнейших операций одного и того же блока.

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