Вернуть указатель на массив из функции и продолжить работу с этим массивом в main() - C (СИ)
Формулировка задачи:
Функция создает массив или изменяет его уже готовый. Главное - готовый массив передать в main и продолжить работу с ним уже в main. С помощью указателя? И как, например, уже в main вывести массив на экран?
Решение задачи: «Вернуть указатель на массив из функции и продолжить работу с этим массивом в main()»
textual
Листинг программы
#include <stdlib.h> #include <stdio.h> #define RND(A, B) ((A) + rand() % ((B) - (A))) int *alloc_vect(size_t size) { size_t i = 0; int * r = (int*) calloc(size, sizeof(int)); if (r == NULL ) { printf("Can't allocate memory"); exit(1); } else { for (i = 0; i < size; ++i) r[i] = RND(5,10); } return r; } int dealloc_vect(int * v, size_t size) { if (v != NULL ) { free(v); return 0; } else { printf("Error. Vector is empty"); return 1; } } void print(int *v, size_t size) { size_t i = 0; for (i = 0; i < size; ++i) printf("%4d", v[i]); } ; int main() { size_t s; scanf("%zu", &s); int *vector = alloc_vect(s); print(vector, s); dealloc_vect(vector, s); return 0; }
Объяснение кода листинга программы
- Объединение
и включает в себя необходимые заголовочные файлы для работы с памятью и выводом данных. - Определенная заранее макросная функция RND(A, B) используется для генерации случайного числа в диапазоне от A до B включительно.
- Функция alloc_vect() выделяет память под массив целых чисел с помощью calloc(), проверяет успешность операции и инициализирует элементы массива случайными числами.
- Функция dealloc_vect() освобождает память, выделенную под массив, и проверяет его на пустоту.
- Функция print() выводит элементы массива в формате 4-х разрядного целого числа.
- В функции main() пользователю предлагается ввести размер массива, затем выделяется память под массив, выводится его содержимое, после чего массив освобождается.
- Возможные значения переменных:
- s - размер массива (введен пользователем)
- vector - указатель на выделенный массив
- i - счетчик элементов массива в функции print()
- A, B - параметры функции RND()
- r - указатель на выделенный массив в функции alloc_vect()
- v - указатель на массив в функции dealloc_vect()
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д