Изменение размера массива по ходу программы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго дня. Надо изменять размерность массива по ходу выполнения программы. Хотел, по наивности, сделать так:
volatile uint16_t testarray[1];
 
int main(void)
{
///
if ( param = 1 )
{
testarray[20];
}
else if ( param = 0 )
{
testarray[1]; 
}
///
}
, где /// - опущенные ненужные строки кода. Но не прокатило. Подсказали про функции malloc, realloc и free. Но компилятор даёт кучу ошибок (см. вложение), когда я пытаюсь состряпать хотя бы создание массива. Пробовал так:
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;
}

Объяснение кода листинга программы

  1. Объявлены две функции: Resize и main.
  2. В функции Resize определены три переменные: i, k, r. Значение k будет использоваться для контроля цикла.
  3. Значение new_size проверяется на максимальное значение old_size, чтобы избежать переполнения.
  4. Выделен новый массив r с помощью функции calloc.
  5. В цикле копируются элементы из старого массива Arr в новый массив r.
  6. Функция free используется для освобождения памяти, выделенной для старого массива Arr.
  7. Возвращается адрес нового массива r.
  8. В функции main объявлены две переменные: A и i.
  9. Выделен массив A с помощью функции calloc размером 20 элементов.
  10. В цикле заполняются элементы массива A значениями от 0 до 19.
  11. Выводится сообщение Initial Arr= и значения элементов массива A.
  12. Массив A передается в функцию Resize для изменения размера.
  13. Выводится сообщение After resizing = и значения элементов нового массива A.
  14. Массив A освобождается с помощью функции free.
  15. Запускается команда PAUSE для приостановки выполнения программы.
  16. Возвращается значение 0, указывающее на успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы