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

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

  1. Объединение и включает в себя необходимые заголовочные файлы для работы с памятью и выводом данных.
  2. Определенная заранее макросная функция RND(A, B) используется для генерации случайного числа в диапазоне от A до B включительно.
  3. Функция alloc_vect() выделяет память под массив целых чисел с помощью calloc(), проверяет успешность операции и инициализирует элементы массива случайными числами.
  4. Функция dealloc_vect() освобождает память, выделенную под массив, и проверяет его на пустоту.
  5. Функция print() выводит элементы массива в формате 4-х разрядного целого числа.
  6. В функции main() пользователю предлагается ввести размер массива, затем выделяется память под массив, выводится его содержимое, после чего массив освобождается.
  7. Возможные значения переменных:
    • s - размер массива (введен пользователем)
    • vector - указатель на выделенный массив
    • i - счетчик элементов массива в функции print()
    • A, B - параметры функции RND()
    • r - указатель на выделенный массив в функции alloc_vect()
    • v - указатель на массив в функции dealloc_vect()

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


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

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

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