courses:programming:topic11
Динамические структуры
// 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