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