Изменение размера массива по ходу программы - 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, указывающее на успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д