Изменение размера массива - 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; }
Объяснение кода листинга программы
- В функции
resize
происходит изменение размера массива.- Если передаваемый в функцию счетчик равен 1, то указатель на массив приводится к нулю, что приводит к выделению нового массива нулевого размера.
- Функция
realloc
используется для изменения размера массива. В указатель на массив передается новое значение размера, умноженное на счетчик. - При помощи функции
memmove
происходит перенос данных из старого массива в новый, начиная с элемента с индексомsz*(count-1)
в новом массиве и до конца нового массива. - При помощи функции
memmove
происходит перенос данных из элемента с индексомsz
в старом массиве в начало нового массива. - Возвращается указатель на новый массив.
- В функции
main
происходит тестирование функцииresize
.- Создаются переменные
pi
,pc
иpd
для хранения указателей на массивы целых чисел, символов и чисел с плавающей точкой соответственно. - Создается переменная
ps
для хранения указателя на строку. - Создается массив
s
для хранения строк. - Происходит цикл по индексам от 0 до 9 для каждого из массивов.
- Для каждого массива вызывается функция
resize
для изменения размера массива. - После цикла происходит печать элементов каждого из массивов.
- Вызывается функция
system
для приостановки выполнения программы. - Все выделенные массивы освобождаются при помощи функции
free
. - Возвращается значение 0, что означает успешное завершение программы.
- Создаются переменные
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д