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