Как инициализировать динамический массив в отдельной функции? - C (СИ)

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

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

Здравствуйте, хочу инициализировать три динамических массива отдельной функцией.
int main(int argc, char* argv[]){
 
    ushort *big1=0, *big2=0, *res=0;
    ushort lenBig1 = strlen(argv[1]) - 2, lenBig2 = strlen(argv[2]) - 2;
 
    InitMas(big1, big2, res, lenBig1, lenBig2, argv);
 
    return 0;
}
Сама функция.
void InitMas(ushort* big1, ushort* big2, ushort* res, ushort lenBig1, ushort lenBig2,char **argv){
    big1 = (ushort*)calloc(lenBig1, sizeof(ushort));
    big2 = (ushort*)calloc(lenBig2, sizeof(ushort));
    res = (ushort*)calloc(max(lenBig1, lenBig2) + 1, sizeof(ushort));
}
Желательно бы там же инициализировать и эту строку.
lenBig1 = strlen(argv[1]) - 2;
lenBig2 = strlen(argv[2]) - 2;
Функция не работает, не могу разобраться как передавать, где нужны указатели или указатели на указатели. В main() инициализировать могу, но выглядит не красиво, а в отдельную функцию вывести знаний не хватает. Если есть какая-то статья про передаваемые значения в функции, дайте ссылку, пожалуйста. То, что нашел сам, в продвижении вопроса не помогло
Знаю, что можно проинициализировать один массив отдельной функцией типа
int ** alloc_array( size_t n, size_t m ) {
    int **p;
    ...
    return p;
}
Но она возвращает указатель на указатель на массив, как переделать под себя без возврата этого всего не представляю

Решение задачи: «Как инициализировать динамический массив в отдельной функции?»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int *alloc_array(size_t sz){
    return (int*)calloc(sz, sizeof(int));
    }
void big_big_init(int**arr, int **arr2, size_t sz, size_t sz2){
    *arr=alloc_array(sz);
    *arr2=alloc_array(sz2);
    }
int main(){
    int *a, *b;
    big_big_init(&a, &b, 10,20);
    return 0;
    }

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

  1. #include Включает в себя файл стандартного ввода/вывода, который необходим для работы с функциями отправки сообщений в консоль.
  2. #include Включает в себя файл стандартных функций, которые используются для работы с памятью, в том числе и для выделения и освобождения памяти.
  3. *int alloc_array(size_t sz){** Эта функция выделяет динамический массив указанного размера и возвращает его адрес.
  4. void big_big_init(intarr, int arr2, size_t sz, size_t sz2){ Эта функция инициализирует два динамических массива заданного размера.
  5. int main(){ Это точка входа в программу, с которой начинается выполнение любой программы на C.
  6. int a, b; Объявляются две указательные переменные на int, которые будут использоваться для хранения адресов динамических массивов.
  7. big_big_init(&a, &b, 10,20); Вызывается функция big_big_init, которая инициализирует динамические массивы a и b размером 10 и 20 соответственно.
  8. return 0; Возвращает 0, что означает успешный конец работы программы.

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

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