Изменение размера массива - C (СИ)

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

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

Здравствуйте. Как можно составить функцию, которая вставляет число

a

в начало массива (со сдвигом), изменяя размер занимаемого массивом блока памяти? Массив динамический.

Решение задачи: «Изменение размера массива»

textual
Листинг программы
void* resize(void *arr,void *el,int sz,int count)
{
    if(count==1) arr=0;
    arr=realloc(arr,sz*count);
    memmove((char*)arr+sz,arr,sz*(count-1));
    memmove(arr,el,sz);
    return arr;
}
int main(int argc,char* argv[])
{   
    int i,*pi;
    char ch,*pc;
    double d,*pd;
    char *ps,s[][10]={"QWERTY","123456789"};
    
    for(i=0; i<10; i++) pi=resize(pi,&i,sizeof(int),i+1);
    for(i=0; i<10; i++) printf("%d ",pi[i]);
    printf("\n");
    for(i=0,ch='A'; ch<='Z'; i++,ch++) pc=resize(pc,&ch,sizeof(char),i+1);
    for(ch='A'; ch<='Z'; ch++) printf("%c ",pc[ch-'A']);
    printf("\n");
    for(d=i=0; d<10; i++,d++) pd=resize(pd,&d,sizeof(double),i+1);
    for(i=0; i<10; i++) printf("%.4lf ",pd[i]);
    printf("\n");
    for(i=0; i<2; i++) ps=resize(ps,s[i],10,i+1);
    for(i=0; i<2; i++) printf("%s\n",ps+i*10);
    system("pause");
    free(pi);
    free(pc);
    free(pd);
    free(ps);
    return 0;
}

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

  1. В функции resize происходит изменение размера массива.
    • Если передаваемый в функцию счетчик равен 1, то указатель на массив приводится к нулю, что приводит к выделению нового массива нулевого размера.
    • Функция realloc используется для изменения размера массива. В указатель на массив передается новое значение размера, умноженное на счетчик.
    • При помощи функции memmove происходит перенос данных из старого массива в новый, начиная с элемента с индексом sz*(count-1) в новом массиве и до конца нового массива.
    • При помощи функции memmove происходит перенос данных из элемента с индексом sz в старом массиве в начало нового массива.
    • Возвращается указатель на новый массив.
  2. В функции main происходит тестирование функции resize.
    • Создаются переменные pi, pc и pd для хранения указателей на массивы целых чисел, символов и чисел с плавающей точкой соответственно.
    • Создается переменная ps для хранения указателя на строку.
    • Создается массив s для хранения строк.
    • Происходит цикл по индексам от 0 до 9 для каждого из массивов.
    • Для каждого массива вызывается функция resize для изменения размера массива.
    • После цикла происходит печать элементов каждого из массивов.
    • Вызывается функция system для приостановки выполнения программы.
    • Все выделенные массивы освобождаются при помощи функции free.
    • Возвращается значение 0, что означает успешное завершение программы.

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


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

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

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