Создать функцию для выделения динамической матрицы

#c #function #matrix #allocation

#c #функция #матрица #выделение

Вопрос:

Я хочу создать функцию на C, которая выделяет динамическую матрицу; идея состоит в том, чтобы выделить массив, элементы которого являются указателями на массивы; если я хочу сделать это в функции, какой правильный код?

это

 f(***matrix)
  

или это

 f(**matrix)?
  

Я бы сказал, первое, но я не уверен. Спасибо!

Комментарии:

1. Ни один из них не является допустимым прототипом функции, и ни одно из них не является полезным выражением вызова функции для такого выделения.

Ответ №1:

Вы, вероятно, хотите что-то вроде

 double **
allocate_array(size_t rows, size_t cols)
{
    double **array = malloc(cols * sizeof(*array));
    if (array == NULL) return NULL;
    for (size_t i = 0; i < cols; i  ) {
        array[i] = malloc(rows * sizeof(*array[i]));
        for (size_t j = 0; j < rows; j  ) array[i] = 0.0;
        if (array[i] == NULL) {
             while (i != 0) free(array[--i]);
             free(array);
             return NULL;
        }
    }
    return array;
}
  

Комментарии:

1. Для согласованности вместо sizeof(**array)) я бы написал sizeof(*array[i]) (или как sizeof есть оператор: sizeof *array[i] ). В любом случае плюс 1, по крайней мере, для внутреннего цикла очистки … 🙂

2. Это довольно приятно, но calloc() вводит в заблуждение. Нет требования, чтобы ноль с плавающей запятой был побитовым нулем (так же, как NULL не обязательно должен быть побитовым нулем). Инициализация, выполняемая calloc() , бесполезна.