Есть ли аналог realloc(), но расширяющийся в обратную сторону и возвращающий указатель на начало - C (СИ)

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

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

встречный вопрос форумчанам. Есть ли аналог realloc(), но расширяющийся в обратную сторону и возвращающий указатель на начало. т.е. так
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]);
и на выходе получить 10 2.

Решение задачи: «Есть ли аналог 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;
}

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

В этом коде:

  1. Сначала в строке int *p = malloc(sizeof(int)); выделяется память для одного целочисленного значения.
  2. Затем в строке printf(%p\n, p); выводится адрес выделенной памяти.
  3. Далее в строке p = realloc(p, 2 * sizeof (int)); память, выделенная под одно целочисленное значение, изменяется так, чтобы в ней можно было хранить два целочисленных значения.
  4. После этого в строке printf(%p\n%p\n, p, p + 1); выводятся адреса первых двух элементов выделенной памяти.
  5. В строке p = realloc(p, 4 * sizeof (int)); память изменяется так, чтобы в ней можно было хранить четыре целочисленных значения.
  6. Затем в строке printf(%p\n%p\n, p + 2, p + 3); выводятся адреса вторых двух элементов выделенной памяти.
  7. В конце в строке free(p); освобождается выделенная память, а в строке return 0; программа возвращает 0, т.е. успешно завершилась.

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


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

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

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