Динамическое выделение памяти для массива - C (СИ)

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

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

Есть лаба, задание скриншотом ниже. Я вроде бы как сделал его, но вот второй массив который я использую что бы не терять данные с предыдущего нужно задавать вручную. Можно как то сделать, что бы и его размер изменялся в зависимости от кол-ва элементов.
int main() {
    int *a = 0;
    int *b = 0;
    int n = 0, count = 1, t = 0;
 
    b = (int*)malloc(count * sizeof(int)); //Тот самый массив
 
    while (1)
    {
        printf("\nEnter Integer Number: ");
        scanf("%d", &n);
        if (n > 0)
 
        {
            free(a);
            a = (int*)malloc(count * sizeof(int));
            a[t] = n;
            b[t] = a[t];
 
            count++;
            t++;
            
        }
        else
        {
            free(a);
            free(b);
            break;
        }
    }
 
}

Решение задачи: «Динамическое выделение памяти для массива»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int main()
{
    int *a = NULL, *b = NULL;
    int x = 1, n = 0, i;
 
    while (1)
    {
        scanf("%d", &x);
        if (x < 0) break;
 
        b = malloc( (n+1) * sizeof(*a) );
        memcpy(b, a, n*sizeof(*a));
        free(a);
        a = b;
        b = NULL; // на всякий случай
 
        a[n++] = x;
    }
 
    printf("n = %d\n", n);
 
    for (i=0; i<n; i++)
        printf("%d ", a[i]);
 
    free(a);
    return 0;
}

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

В этом коде происходит динамическое выделение памяти для массива.

  1. Сначала объявляются две переменные типа int, которые будут использоваться как указатели: a и b. Изначально обе они равны NULL.
  2. Затем объявляется переменная x, которая будет использоваться для чтения значений из стандартного ввода.
  3. Далее объявляется переменная n, которая изначально равна 0 и используется для отслеживания количества элементов в массиве.
  4. Затем начинается цикл while, который продолжается до тех пор, пока x не станет отрицательным.
  5. Внутри цикла b динамически выделяется память с помощью функции malloc(). Размер памяти, который нужно выделить, увеличивается на 1 каждый раз, чтобы учесть новый элемент.
  6. Затем содержимое a копируется в b с помощью функции memcpy(). Это делается для того, чтобы при изменении a не изменялся исходный массив.
  7. После этого a освобождается с помощью функции free().
  8. a и b меняются местами, и b освобождается.
  9. Новый элемент добавляется в массив a с помощью a[n++] = x;.
  10. После выхода из цикла, выводится количество элементов в массиве с помощью printf(n = %d\n, n);.
  11. Затем с помощью цикла for выводятся все элементы массива.
  12. Наконец, a освобождается с помощью free(a);, и функция main() возвращает 0, указывая на успешное выполнение.

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


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

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

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