Пытаясь написать функцию умножения матриц для матриц произвольного размера в C. Я пытаюсь сделать следующее для моей сигнатуры функции:
void matrixMult(void *A, int Xa, int Ya, void *B, int Xb, int Yb);
(пока я возвращаюсь к нему, я возвращаю void, я вернусь позже, как только он заработает так, как я хочу)
Параметры X и Y предназначены для информирования функции о размерах входящих массивов (насколько я понимаю, это необходимо, поскольку в массивах C не известны их собственные размеры). Итак, я передаю два пустых указателя A и B, а также их размеры.
Мой вопрос: Как только я нахожусь в функции, как мне перейти к приведению пустых указателей обратно к массивам int, чтобы я мог их прочитать? Я попробовал следующее:
(int)*A[someX][someY]
, но я получаю ошибку компилятора о «недопустимом использовании пустого указателя».
EDIT
Следующее - моя полная функция на данный момент (обновляется, так как я ее устраняю):
#pragma warning(disable: 8057)
#include <stdio.h>
void matrixMult(int **A, int Xa, int Ya, int **B, int Xb, int Yb);
int main(int argc, char *argv[]) {
// [x][y] x--> row; y-->cols
int a[3][5] = {
{ 1, 2, 3, 4, 5 }
, { 10, 20, 30, 40, 50 }
, { 4, 8, 15, 16, 23 }
};
int b[5][7] = {
{ 1, 2, 3, 4, 5, 6, 7 }
, { 10, 20, 30, 40, 50, 60, 70 }
, { 4, 8, 15, 16, 23, 42, 0 }
, { 1, 2, 3, 4, 5, 6, 7 }
, { 10, 20, 30, 40, 50, 60, 70 }
};
matrixMult((int **)a, 3, 5, (int **)b, 5, 7);
printf("done\n");
return 0;
}
void matrixMult(int **A, int Xa, int Ya, int **B, int Xb, int Yb) {
printf("starting matrix mult\n");
int i, j;
for (i=0; i<Xa; i++) {
for (j=0; j<Ya; j++) {
//printf("%i, %i:\t", i, j);
printf("%i\t", A[Ya*i+j]);
}
printf("\n");
}
}
РЕДАКТИРОВАТЬ 2 Спасибо за советы и ресурсы, ребята! Вышеприведенная версия работает так, как я ожидаю, но я боюсь, что это отвратительная форма того, как указатели ПРЕДЛАГАЕТСЯ использовать. Сейчас я собираюсь еще немного почитать указатели (спасибо cnicutar!), И я вернусь к этому позже. Любая дальнейшая критика моей последней версии приветствуется, но я отмечаю этот ответ и продолжаю читать дальше. Еще раз спасибо!