gtn-gagarin писал(а): ↑18.04.2009 16:19
Как видно, A - двумерный массив.
а
в Си нет двухмерных массивов.
есть массивы массивов, есть массивы указателей на другие массивы, но того, что вам надо просто нет.
это вовсе не двухмерный массив, это одномерный массив, который имеет 10 элементов, причём каждый элемент - это массив из 20 целых чисел. при объявлении массива и при передачи в функцию, нужно указать, тип эл-тов массива. В данном случае функция будет такая:
int DECOMP(int NDIM, int N, float A[][20], float COND, int IPVT[], float WORK)
{return 0;}
т.е. мы передаём одномерный массив из нескольких float[20]. причём сколько их функция не узнает, кроме того элементы всегда будут именно по 20 штук. Если вам это не нравится, используйте массивы указателей, там можно всё, и не только передавать такой массив в функцию(указатель на указатель), но и делать например трёхугольные массивы.
Да. вы размерности в функцию передаёте, потому массив вам нужен динамический, типа float **A, т.е. не один массив, а NDIM массивов, каждый по N эл-тов типа float, и ещё один массив размером в NDIM из указателей на эти массивы.