Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2012-03-20 15:46:24, 0.4 KB) [[attachment:1.c]]
- [получить | показать] (2012-03-27 15:48:39, 2.0 KB) [[attachment:2.c]]
- [получить | показать] (2012-03-27 15:53:19, 2.2 KB) [[attachment:2_realloc.c]]
Вам нельзя прикреплять файлы к этой странице.