Динамическое выделение памяти для массива - 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; }
Объяснение кода листинга программы
В этом коде происходит динамическое выделение памяти для массива.
- Сначала объявляются две переменные типа int, которые будут использоваться как указатели:
a
иb
. Изначально обе они равны NULL. - Затем объявляется переменная
x
, которая будет использоваться для чтения значений из стандартного ввода. - Далее объявляется переменная
n
, которая изначально равна 0 и используется для отслеживания количества элементов в массиве. - Затем начинается цикл while, который продолжается до тех пор, пока
x
не станет отрицательным. - Внутри цикла
b
динамически выделяется память с помощью функцииmalloc()
. Размер памяти, который нужно выделить, увеличивается на 1 каждый раз, чтобы учесть новый элемент. - Затем содержимое
a
копируется вb
с помощью функцииmemcpy()
. Это делается для того, чтобы при измененииa
не изменялся исходный массив. - После этого
a
освобождается с помощью функцииfree()
. a
иb
меняются местами, иb
освобождается.- Новый элемент добавляется в массив
a
с помощьюa[n++] = x;
. - После выхода из цикла, выводится количество элементов в массиве с помощью
printf(
n = %d\n, n);
. - Затем с помощью цикла for выводятся все элементы массива.
- Наконец,
a
освобождается с помощьюfree(a);
, и функция main() возвращает 0, указывая на успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д