Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/39: Рейтинг темы: голосов - 39, средняя оценка - 4.69
 Аватар для MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96

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

01.05.2008, 12:04. Показов 7775. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2008, 12:04
Ответы с готовыми решениями:

Передача динамического двумерного массива в процедуру
Написал вот такой код для одномерного динамического массива #include &lt;iostream&gt; #include &lt;clocale&gt; using...

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

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

8
 Аватар для MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
01.05.2008, 15:35  [ТС]
хым, так что делать-то? (
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
02.05.2008, 23:08
Вроде так можно
Code
1
void ENTR(double (*pMas)[n][n], char *file)
Code
1
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
А я бы в функцию передавал указатели и размеры:
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  [ТС]
оо, пасипки
правда, уже брат помог: говорит, надо через ** создавать вообще такой массив
0
 Аватар для MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
12.05.2008, 18:38  [ТС]
что-то calloc статически работает (
а как именно через динамический массив теперь это сделать?
0
 Аватар для MsDos
5 / 5 / 1
Регистрация: 13.05.2008
Сообщений: 96
13.05.2008, 20:46  [ТС]
ура, все заработало, если интересно, написала так
при вызове:
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
Ну это все равно сложновато писать....
Есть в С++ реализация динамических массивов, только в хелпах на них в BDS2006 трудно инфу найтить. Да и реализован класс,если не ошибаюсь, так как я описал. Все динамические массивы через "кучу" делаются и выделение памяти налету. Так что надо всего лишь описать класс в котором будут храниться размеры массива и сами его данные => тогда в качестве параметра просто указываешь имя переменной и все.

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

Добавлено через 13 минут
я сижу в среде Borland C++ for DOS доисторического происхождения (порядка 2000г), вряд ли там содержится требуемый хелп >_<
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2008, 09:50
Помогаю со студенческими работами здесь

Передача двумерного динамического массива в конструктор
Всем привет, задача. Произвольный многоугольник в двумерном пространстве». Данные класса: количество вершин, указатель на динамически...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru