Я хотел бы определить пользовательскую структуру, которая содержит два динамически размещаемых целочисленных массива a
и b
.Чтобы выделить память для массивов и инициализировать массивы значениями, я написал функцию «конструктор» initp
.Мой подход представлен ниже.
Пользовательская структура с именем pair
:
typedef struct {
...
int l; // length of compositions
int k; // no. of elements in compositions
int *a; // composition 1
int *b; // composition 2
} pair;
Функция для инициализации пользовательской структуры:
int initp(..., int l, int k, int a[], int b[], pair *f) {
...
f->l = l;
f->k = k;
// allocate composition arrays
f->a = (int *) calloc(l, sizeof(int));
f->b = (int *) calloc(l, sizeof(int));
// initialise composition arrays
for (int i = 0; i < k; i++) {
f->a[i] = a[i];
f->b[i] = b[i];
}
}
Вызов функции вОсновная программа:
// initialise pairs
pair f1, f2;
initp(..., 10, 2, (int[]){3, 4}, (int[]){7, 6}, &f1);
initp(..., 10, 1, (int[]){4}, (int[]){9}, &f2);
Моя задача написать «элегантный» код.Поэтому у меня есть следующие вопросы:
- Можно ли избежать указания номера "нет"?элементов в массивах
a
и b
переданы в initp
?Это параметр k
.В приведенных выше примерах это 2 и 1. - Можно ли избежать "явного" приведения с
(int[])
в вызове функции? - Пожалуйста, дайте мне знать, если у вас есть общие комментариии критика по улучшению качества кода.