Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/37: Рейтинг темы: голосов - 37, средняя оценка - 4.65
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
#1

Передача динамического двумерного массива через параметры

01.05.2008, 12:04. Просмотров 6727. Ответов 8
Метки нет (Все метки)

в такой вот простенькой программке:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include ..
const n = 4;
 
void ENTR(double pMas[n][n], char *file)
{
 ifstream SMas(file);
 for (k; k < n; k++) { for (t; t < n; t++) { SMas>>pMas[k][t];} }
 SMas.close();
}
 
 
void main ()
{
 clrscr(); 
 char *FA = "A.TXT";
 double *A = (double *) calloc(n, n);
 
 ENTR(A, FA);
 
 FREE(A);
 getch();
}
на строчку вызова: ' double *A = (double *) calloc(n, n);'
выдается ошибка: 'cannot convert 'double *' to 'double[4] *''

не понимаю, что не нравится компилятору, и как это исправлять
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2008, 12:04
Ответы с готовыми решениями:

Передача динамического двумерного массива в функцию
Я сделал вот так: void PrintMatrix(int** matrix, int&amp; n, int&amp; m) { for...

Передача двумерного динамического массива в функцию
Как можно передать динамическую матрицу в функцию что бы при выходе из функции...

Передача динамического двумерного массива в процедуру
Написал вот такой код для одномерного динамического массива #include...

Передача по ссылке двумерного динамического массива в функцию
Приведите, пожалуйста, пример. Нигде не могу найти.

Передача двумерного динамического массива в функцию(объяснение)
Когда мы хотим передать двумерный динамический массив в функцию через указатели...

8
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
01.05.2008, 15:35 #2
хым, так что делать-то? (
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,213
Завершенные тесты: 3
02.05.2008, 23:08 #3
Вроде так можно
Код
void ENTR(double (*pMas)[n][n], char *file)
Код
double (*A)[n][n] = (double(*)[n][n]) calloc(n*n,sizeof(double));
0
dioxidin
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
06.05.2008, 11:26 #4
А я бы в функцию передавал указатели и размеры:
C++
1
2
3
4
void ENTR(double **pMas,int Rows, int Cols,...)
{
...
}
Мне тут же на форуме помогли с созданием матричного класса. Вот конструктор:
C++
1
2
3
4
5
6
7
8
9
10
11
__fastcall TMatrix::TMatrix(int Rows, int Cols)
{
    //
    csM = new TCriticalSection();
    R = Rows, C = Cols;
    M = (float**) calloc(R, sizeof(float));
    for(int i = 0; i < R; i++){
      M[i] = (float*) calloc(C, sizeof(float));
      for(int j = 0; j < C; j++) M[i][j] = 0;
    }
}
и ссылка на топик.
Читай.. Прям твоя тема Поис рулит
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
10.05.2008, 17:25 #5
оо, пасипки
правда, уже брат помог: говорит, надо через ** создавать вообще такой массив
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
12.05.2008, 18:38 #6
что-то calloc статически работает (
а как именно через динамический массив теперь это сделать?
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
13.05.2008, 20:46 #7
ура, все заработало, если интересно, написала так
при вызове:
C++
1
2
 double **A = new double *[n];
 for (k=0; k<n; k++)  A[k] = new double [n];
при передаче:
C++
1
 void CORD1(double *(*pMas), int n, char *file)
0
dioxidin
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
14.05.2008, 14:23 #8
Ну это все равно сложновато писать....
Есть в С++ реализация динамических массивов, только в хелпах на них в BDS2006 трудно инфу найтить. Да и реализован класс,если не ошибаюсь, так как я описал. Все динамические массивы через "кучу" делаются и выделение памяти налету. Так что надо всего лишь описать класс в котором будут храниться размеры массива и сами его данные => тогда в качестве параметра просто указываешь имя переменной и все.

А про это:
Цитата Сообщение от MsDos
double **A = new double *[n];
Мне кажется что тут не хватает выделения памяти в соответствии со вторым индексом массива. По-моему - ошибка.
0
MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
15.05.2008, 09:50 #9
следующий цикл довыделяет память, все нормально:
Цитата Сообщение от MsDos
double **A = new double *[n];
for (k=0; k<n; k++) A[k] = new double [n];
программа простенькая (искать решение СЛАУ) => присабачивать классы - перегруженная роскошь

Добавлено через 13 минут
я сижу в среде Borland C++ for DOS доисторического происхождения (порядка 2000г), вряд ли там содержится требуемый хелп >_<
0
15.05.2008, 09:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2008, 09:50

Передача двумерного динамического массива чисел в функцию
void Map::setCell(int** block, Room* room, int type){ for(int i=room-&gt;x;...

Передача двумерного динамического массива в функцию построчно и сортировка
Всем доброго времени суток! Собственно сабж: есть двумерный динамический...

Передача двумерного динамического массива в функцию в качестве параметра
Вообщем надо сложить и умножить две матрицы, но сделать это в отдельных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru