Изменение размера массива по ходу программы - C (СИ)
Формулировка задачи:
Доброго дня.
Надо изменять размерность массива по ходу выполнения программы.
Хотел, по наивности, сделать так:
,
где /// - опущенные ненужные строки кода.
Но не прокатило.
Подсказали про функции malloc, realloc и free.
Но компилятор даёт кучу ошибок (см. вложение), когда я пытаюсь состряпать хотя бы создание массива.
Пробовал так:
Если кому не трудно, то напишите, пожалуйста:
а) как правильно создать нужный массив;
б) как правильно изменить его размерность.
Листинг программы
- volatile uint16_t testarray[1];
- int main(void)
- {
- ///
- if ( param = 1 )
- {
- testarray[20];
- }
- else if ( param = 0 )
- {
- testarray[1];
- }
- ///
- }
Листинг программы
- volatile uint16_t *testarray;
- testarray = (uint16_t *) malloc (sizeof (uint16_t) * 20);
Решение задачи: «Изменение размера массива по ходу программы»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- // old_size - старый размер
- // new_size - новый размер
- int* Resize(int *Arr, int old_size, int new_size)
- {
- int i,k;
- k=(old_size<new_size)?old_size:new_size;
- int *r=calloc(new_size,sizeof(int));
- for (i=0; i<k; i++) r[i]=Arr[i];
- free(Arr);
- return r;
- }
- int main(int argc, char *argv[])
- {
- int *A;
- int i;
- A=calloc(20,sizeof(int)); // массив из 20 эл-тов
- for (i=0; i<20; i++) A[i]=i; // заполняем
- printf("Initial Arr="); // печатаем
- for (i=0; i<20; i++) printf(" %d",A[i]);
- printf("\n");
- A=Resize(A,20,30); // ресайзируем
- printf("After resizing ="); // печатаем
- for (i=0; i<30; i++) printf(" %d",A[i]);
- printf("\n");
- free(A); // удаляем
- system("PAUSE");
- return 0;
- }
Объяснение кода листинга программы
- Объявлены две функции:
Resize
иmain
. - В функции
Resize
определены три переменные:i
,k
,r
. Значениеk
будет использоваться для контроля цикла. - Значение
new_size
проверяется на максимальное значениеold_size
, чтобы избежать переполнения. - Выделен новый массив
r
с помощью функцииcalloc
. - В цикле копируются элементы из старого массива
Arr
в новый массивr
. - Функция
free
используется для освобождения памяти, выделенной для старого массиваArr
. - Возвращается адрес нового массива
r
. - В функции
main
объявлены две переменные:A
иi
. - Выделен массив
A
с помощью функцииcalloc
размером 20 элементов. - В цикле заполняются элементы массива
A
значениями от 0 до 19. - Выводится сообщение
Initial Arr=
и значения элементов массиваA
. - Массив
A
передается в функциюResize
для изменения размера. - Выводится сообщение
After resizing =
и значения элементов нового массиваA
. - Массив
A
освобождается с помощью функцииfree
. - Запускается команда
PAUSE
для приостановки выполнения программы. - Возвращается значение 0, указывающее на успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д