Вернуть указатель на массив из функции и продолжить работу с этим массивом в 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()