Есть ли аналог realloc(), но расширяющийся в обратную сторону и возвращающий указатель на начало - C (СИ)
Формулировка задачи:
встречный вопрос форумчанам. Есть ли аналог realloc(), но расширяющийся в обратную сторону и возвращающий указатель на начало. т.е. так
и на выходе получить 10 2.
int *p = malloc(sizeof(int));
p[0] = 2;
p = somthing_realloc(p, 2 * sizeof(int));
p[0] = 10;
printf("%d %d", p[0], p[1]);Решение задачи: «Есть ли аналог realloc(), но расширяющийся в обратную сторону и возвращающий указатель на начало»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int *p = malloc(sizeof(int));
printf("%p\n", p);
p = realloc(p, 2 * sizeof (int));
printf("%p\n%p\n", p, p + 1);
p = realloc(p, 4 * sizeof (int));
printf("%p\n%p\n", p + 2, p + 3);
free(p);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Сначала в строке
int *p = malloc(sizeof(int));выделяется память для одного целочисленного значения. - Затем в строке
printf(%p\n, p);выводится адрес выделенной памяти. - Далее в строке
p = realloc(p, 2 * sizeof (int));память, выделенная под одно целочисленное значение, изменяется так, чтобы в ней можно было хранить два целочисленных значения. - После этого в строке
printf(%p\n%p\n, p, p + 1);выводятся адреса первых двух элементов выделенной памяти. - В строке
p = realloc(p, 4 * sizeof (int));память изменяется так, чтобы в ней можно было хранить четыре целочисленных значения. - Затем в строке
printf(%p\n%p\n, p + 2, p + 3);выводятся адреса вторых двух элементов выделенной памяти. - В конце в строке
free(p);освобождается выделенная память, а в строкеreturn 0;программа возвращает 0, т.е. успешно завершилась.