User Tools

Site Tools


courses:programming:topic11

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

courses:programming:topic11 [2016/11/19 14:32]
kkv
courses:programming:topic11 [2022/12/10 09:08]
Line 1: Line 1:
-=== Динамические структуры === 
- 
-<code c++> 
-// 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; 
-} 
- 
-</​code>​ 
- 
-=== Вопросы по коду === 
- 
-== Вопрос:​ Я не понимаю строку == 
- 
-<​code>​ data = (struct Person*)malloc (sizeof(struct Person)); </​code>​ 
- 
-Что хранит переменная data? 
- 
-== Ответ == 
- 
-Перменная data объявлена и инициализирована так: 
- 
-<​code>​struct Person *data = NULL;</​code>​ 
- 
-Это указатель,​ который может ссылаться (но не ссылается в начальный момент,​ так как ему присвоено занчение NULL) на структуры типа struct Person. 
- 
-Вызов ​ 
- 
-<​code>​malloc (sizeof(struct Person))</​code>​ 
-выделяет память размером сос структуру struct Person и после приведения типа <​code>​(struct Person*)</​code>​ присваивает адрес этого блока памяти указателю data.  
- 
-После всего этого data указывает на область данных в памяти,​ размером с struct Person, выделенную с помощью malloc 
  
courses/programming/topic11.txt · Last modified: 2022/12/10 09:08 (external edit)