Прикреплённый файл «2_realloc.c»

Загрузка

   1 #include <stdio.h>
   2 #include <stdlib.h>
   3 
   4 int *a=NULL; // мой массив (подлежит расширению по необходимости)
   5 int size=0; // текущая емкость массива
   6 int count=0; // занятая емкость массива (count <= size)
   7 int step=4;
   8 
   9 void append( int k )
  10 {
  11     int *new_a;
  12     int j;
  13 
  14     // если в массиве не осталось пустого места
  15     // (в частности, в начале, когда массив вообще нулевой длины)
  16     if( count == size )
  17     {
  18         /*
  19         // 8<----------8<----------------8<-------------------------------
  20         new_a = malloc( (size + step) * sizeof(int) );
  21         if( new_a == NULL )
  22         {
  23             return; // выходим и ничего не делаем.
  24             // собственно говоря, ничего другого в этой функции
  25             // и не поделаешь.
  26         }
  27 
  28         // переписываем заполненный фрагмент массива в новое,
  29         // увеличенное место памяти.
  30         for( j = 0; j < count; j ++ )
  31         {
  32             new_a[j] = a[j];
  33         }
  34         free(a);
  35         a = new_a; // текущий массив будет увеличенного размера
  36         // 8<----------8<----------------8<-------------------------------
  37         * */
  38 
  39         a = realloc( a, (size + step) * sizeof(int) );
  40         printf( " -- произведено увеличение емкости с %d до %d элементов\n",
  41                 size, size+step);
  42         size = size + step;
  43     }
  44 
  45     // в этой точке гарантируется, что в массиве есть свободное место, т.е.
  46     // count < size, и можно выполнить очередное присваивание в a[count].
  47 
  48     a[count] = k;
  49     count ++;
  50 
  51 }
  52 
  53 int main()
  54 {
  55     int n;
  56     int i;
  57     int k;
  58 
  59     printf( "n?\n" );
  60     scanf("%d", &n );
  61     printf( "n = %d\n", n );
  62 
  63     for ( i = 0; i < n; i ++ )
  64     {
  65         scanf("%d", &k );
  66         append( k );
  67     }
  68 
  69     for( i = n-1; i >= 0; i-- )
  70     {
  71         printf( "%d ", a[i] );
  72     }
  73     printf("\n");
  74 
  75     return 0;
  76 }

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.