Название: двухмерные массивы Отправлено: NoX от Февраль 21, 2005, 00:13 Как передать в одну функцию двухмерный массив (динамический и статический) т.е. есть 2 массива
int array[5][5]; -статический int ** array1; - динамический как их передать в одну функцию т.е. void test ( и что тут должно быть написано?) Название: двухмерные массивы Отправлено: pablo от Февраль 21, 2005, 09:51 напиши вот как
void function(int [][5]), 5 надо указывать обязательно. Можно еще и так void function(int **); Название: двухмерные массивы Отправлено: Klaim от Февраль 25, 2005, 21:50 Neploho by esche kak argumenty sdelat' razmery massiva, ili hotya by odnu iz razmernostei
Название: Re: двухмерные массивы Отправлено: rjaan от Март 08, 2005, 22:34 Цитата: "NoX" Как передать в одну функцию двухмерный массив (динамический и статический) т.е. есть 2 массива int array[5][5]; -статический int ** array1; - динамический как их передать в одну функцию т.е. void test ( и что тут должно быть написано?) Допустим, что функция test_perfom производит действия над массивом src, который является двузразмерным, а результат возращает в двухразмерный массив dst, количество возвращаемых столбцов указывается переменной сol, а строк str. Тогда первая переменная будет указателем на неопределенный размерностью двухмерный массив dst, ограниченный переменными col и dst. Вторая переменная src будет константой, т.к. передоваемый исходный двухмерный массив определен размерностью 5x6. Третья col и четвертая src переменные -- это область видимости возвращаемго двухмерного массива dst. Код:
Я думаю, что так будет вернее... Название: Re: двухмерные массивы Отправлено: sandy от Июнь 28, 2005, 21:38 Небольшой исходник, где осуществляется передача двумерного массива в функцию через указатель. Доступ к элементам массива конечно, на первый взгляд осуществляется странновато
====================================================== #include <stdlib.h> #include <stdio.h> const int n=4; // Размер матрицы void OutputMatrix(int* m) /* Функция вывода матрицы */ { printf("Квадратная матрица размерностью %d на %d:\n",n,n); for (int i=0;i<n;i++) { for (int j=0;j<n;j++) printf("%d ",m[i*n+j]); printf("\n"); } } int DeterminanteMatrix(int* Matrix) /* Функция вычисления детерминанта матрицы */ { int m[n][n]; // Создаем мыссив = Matrix for (int i=0;i<n;i++) for (int j=0;j<n;j++) m[j]=Matrix[i*n+j]; // Копируем эдементы Matrix в m for (int i=0; i<n; i++) { if (abs(m)<1E-10) return 0; for (int j=i+1; j<n; j++) { int d=m[j]/m; for (int k=i; k<n; k++) m[j][k]=m[j][k]-d*m[k]; } } int D=1; for (int i=0;i<n;i++) D=D*m; return D; // Возвращаем детерминант } void ReverseMatrix(int* m, int D) /* Фуекция построения и вывода обратной матрицы */ { printf("Детерминант равен %d\n",D); printf("Обратная матрица:\n"); for (int i=0;i<n;i++) { for (int j=0;j<n;j++) printf("%f ",(double)m[i*n+j]/D); printf("\n"); } } int main() { int Matrix[n][n]={{1,2,3,4}, {2,3,4,3}, {3,4,3,2}, {4,3,2,1}}; // Оъявляем двумерный массив OutputMatrix(&Matrix[0][0]); // Выводим матрицу на экран int D=DeterminanteMatrix(&Matrix[0][0]); // Вычислеям детерминант if (D==0) printf("Матрица вырождена!\n"); // Проверка матрицы else ReverseMatrix(&Matrix[0][0], D);// Строим обратную матрицу return 0; } Название: двухмерные массивы Отправлено: PROGrand от Июль 09, 2005, 21:27 Если дело идёт с C++, то не поленитесь и создайте один раз класс для массивов (а лучше template class), какой надо размерности, в нём проверяйте границы (хотя бы в дебаговой версии). Сделав это избавитесь от утечек, overflow и т.д. да и работа побыстрее пойдёт. Если постараться, то компилятор сделает ваш класс не больше чем изначальный массив и не медленнее.
Название: двухмерные массивы Отправлено: sandy от Октябрь 05, 2005, 14:40 Цитата: "PROGrand" Если дело идёт с C++, то не поленитесь и создайте один раз класс для массивов (а лучше template class), какой надо размерности, в нём проверяйте границы (хотя бы в дебаговой версии). Сделав это избавитесь от утечек, overflow и т.д. да и работа побыстрее пойдёт. Если постараться, то компилятор сделает ваш класс не больше чем изначальный массив и не медленнее. Ну, в моем случае, пример программы с матрицами чисто учебный. Писал студенту, который еще классов не учил. Для себя же я реализовал класс Matrix построенный по учебнику Страуструпа на valarray |