=== Динамические структуры === // Programming 1. Sample at 2016-11-17-14-00.56 #include #include 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