Динамические структуры

// Programming 1. Sample at 2016-11-17-14-00.56 #include <stdio.h> #include <stdlib.h> struct Person { char name[100]; int age; struct Person *next; }; struct Person *data = NULL; void generate_data() { data = (struct Person*)malloc(sizeof(struct Person)); struct Person *ptr = data; printf("data = %p\n",data); for(int i=0; i<5; i++) { sprintf(ptr->name,"name-%d",i); ptr->age = 10+i; if( 4 != i ) { ptr->next = (struct Person*)malloc(sizeof(*ptr)); ptr = ptr->next; } else ptr->next = NULL; } } void print_data() { struct Person *ptr = data; while(ptr) { printf(" %s, age %d\n",ptr->name, ptr->age); ptr=ptr->next; } } int main(/*int c, char **v */) { generate_data(); print_data(); return 0; }

Вопросы по коду

Вопрос: Я не понимаю строку

data = (struct Person*)malloc (sizeof(struct Person));

Что хранит переменная data?

Ответ

Перменная data объявлена и инициализирована так:

struct Person *data = NULL;

Это указатель, который может ссылаться (но не ссылается в начальный момент, так как ему присвоено занчение NULL) на структуры типа struct Person.

Вызов

malloc (sizeof(struct Person))

выделяет память размером со структуру struct Person и после приведения типа

(struct Person*)

присваивает адрес этого блока памяти указателю data.

После всего этого data указывает на область данных в памяти, размером с struct Person, выделенную с помощью malloc