Я пытаюсь написать функцию, которая позволяет мне инициализировать каждый элемент матрицы заданным значением. Я бы хотел, чтобы эта функция была как можно более общей, то есть она могла бы обрабатывать матрицы любого типа данных (float, char и т. Д.). Очевидно, что функции в качестве одного из аргументов потребуется значение, которым пользователь хочет инициализировать элементы матрицы. Поскольку это значение может относиться к любому типу данных, я не знаю, как это сделать. Стандартные функции, такие как printf и scanf, могут принимать аргументы любого типа благодаря использованию спецификаторов формата (% d,% f и т. Д.). Это заставило меня задуматься: как и возможно ли вообще использовать спецификаторы формата в функции, определяемой программистом? В идеале моя функция выглядела бы примерно так:
void initMatrix(void*** matrixToInit, int nRows, int nCols, const char format, void(?) value)
Чтобы после его вызова мне пришлось написать что-то вроде:
char matrixOfAs[3][3];
initMatrix(&matrixOfAs, 3, 3, "%c", 'A');
Возможно ли что-то подобное? Есть ли другие решения этой проблемы?
_Generic
, который находится на C с C11. Вы также можете сделать это с помощью макроса, что проще, но опаснее. Или, возможно, самое простое решение - сделать разные функции для каждого интересующего вас типа: foo_int (), foo_flt (), foo_dbl (), ... - person alx   schedule 14.05.2019int *
, приведение указателя на них (int **
) кvoid **
технически некорректно, использование нескольких уровней указателей для реализации многомерных массивов в любом случае является плохой практикой. Предпочтительнее использовать массивы массивов. - person Eric Postpischil   schedule 14.05.2019&matrixOfAs
- этоchar (*)[3][3]
, который не похож наvoid *** matrixToInit
. - person Ian Abbott   schedule 14.05.2019