Прикреплённый файл «2.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 new_a = malloc( (size + step) * sizeof(int) );
19 if( new_a == NULL )
20 {
21 return; // выходим и ничего не делаем.
22 // собственно говоря, ничего другого в этой функции
23 // и не поделаешь.
24 }
25
26 // переписываем заполненный фрагмент массива в новое,
27 // увеличенное место памяти.
28 for( j = 0; j < count; j ++ )
29 {
30 new_a[j] = a[j];
31 }
32 free(a);
33 a = new_a; // текущий массив будет увеличенного размера
34 printf( " -- произведено увеличение емкости с %d до %d элементов\n",
35 size, size+step);
36 size = size + step;
37 }
38
39 // в этой точке гарантируется, что в массиве есть свободное место, т.е.
40 // count < size, и можно выполнить очередное присваивание в a[count].
41
42 a[count] = k;
43 count ++;
44
45 }
46
47 int main()
48 {
49 int n;
50 int i;
51 int k;
52
53 printf( "n?\n" );
54 scanf("%d", &n );
55 printf( "n = %d\n", n );
56
57 for ( i = 0; i < n; i ++ )
58 {
59 scanf("%d", &k );
60 append( k );
61 }
62
63 for( i = n-1; i >= 0; i-- )
64 {
65 printf( "%d ", a[i] );
66 }
67 printf("\n");
68
69 return 0;
70 }
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите 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]]
Вам нельзя прикреплять файлы к этой странице.