Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,257

Как передать в функцию указатель на двухмерный массив?

14.03.2019, 19:20. Показов 1740. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте. Как передать в функцию указатель на двухмерный массив?
Код компилируется, но дебаггер показал что в функции двухмерный динамический массив типа float создается. но он не выходит наружу. Что сделать что-бы он все-таки вышел наружу?
Вся моя программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cstdlib>
using namespace std;
 
//Глобальные переменные
float **Q;
 
//=================Функции=================
void CreateArray(float **U, int Str, int Stl)
{
    int B;
 
    //Sozdaem massiv
    U = new float*[Str];
    for(B = 0; B < Str; B++)
        U[B] = new float[Stl];
}
 
 
void DeleteArray(float **X, int Strok, int Stlolbcov)
{
    int z;
 
    //Udalenie
    for(z = 0; z < Strok; z++)
       delete[] X[z];
    delete[] X;
}
 
 
int main()
{
    int N, M;
  
    cout << "Vvedite razmeri massiva: N i M:\n";
    cout << "N = ";
    cin >> N;
    cout << "\nM = ";
    cin >> M;
    cout << "\n";
 
    CreateArray(Q, N, M);
    
    DeleteArray((float**)Q, N, M);
 
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2019, 19:20
Ответы с готовыми решениями:

Как передать двухмерный массив в функцию?
Подскажите пожалуйста, как в функцию передать двухмерный массив? Пробовал так: void FuncArr(int** arr){ arr = 111111; } void...

Как передать двухмерный массив в функцию по ссылке?
Преподаватель в универе просит написать функцию вида void st3(&amp;array, &amp;n, &amp;m). Бьюсь головой об стол уже второй день и никак не могу найти...

Как в функцию передать параметр - двухмерный массив
void max_el() { int i,j,max; for ( i=1 ; i&lt;=n; i++) for ( j=1; j&lt;=m; j++) //nahodim maksimalnii element...

11
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
14.03.2019, 19:27
Цитата Сообщение от FFPowerMan Посмотреть сообщение
но он не выходит наружу. Что сделать что-бы он все-таки вышел наружу?
Поподробнее можно?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
14.03.2019, 19:29
передать по ссылке

Добавлено через 1 минуту
new присваивает новое значение указателю, а вы передаете его копированием
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.03.2019, 19:31
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Что сделать что-бы он все-таки вышел наружу?
C++
1
void CreateArray(float **&U, int Str, int Stl)
2
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,257
14.03.2019, 19:35  [ТС]
Azazel-San, завел я указатель на глобальный массив:
C++
1
float **Q;
И хочу создать его в функции. Как мне это сделать?
Сейчас функция CreateArray не выводит указатель на созданный внутри динамический массив U. Когда программа выходит из функции CreateArray, то в Q находится просто 0.

Zayats80888, я пробовал по ссылке, но компилятор ругается - что-то ничего не выходит. Может написать готовый код?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
14.03.2019, 19:37
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Zayats80888, я пробовал по ссылке, но компилятор ругается - что-то ничего не выходит. Может написать готовый код?
может & не туда прилепили?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
14.03.2019, 19:39
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Может написать готовый код?
C++
1
2
3
4
5
6
7
8
void f(int**& arr, std::size_t const size) {
    arr = new int*[size]{};
}
 
int main() {
    int** arr;
    f(arr, 5);
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.03.2019, 19:39
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <cstdlib>
using namespace std;
 
 
 
//=================Функции=================
typedef float ** PointerToPointerToFloat;
 
void CreateArray(PointerToPointerToFloat & U, int Str, int Stl)
{ 
 
    //Sozdaem massiv
    U = new float*[Str];
    for(int B = 0; B < Str; B++)
        U[B] = new float[Stl];
}
 void InitArray(PointerToPointerToFloat & U, int Str, int Stl)
{ 
 
   for(int i = 0; i < Str; ++i)
{
    for(int j = 0; j < Stl; ++j)
    {
        U[i][j]=i+j;
    }
    
}
   
}
 
void DeleteArray(float **X, int Strok, int Stlolbcov)
{
    int z;
 
    //Udalenie
    for(z = 0; z < Strok; z++)
       delete[] X[z];
    delete[] X;
}
void printFloatArray(PointerToPointerToFloat & U, int Str, int Stl)
{
for(int i = 0; i < Str; ++i)
{
    for(int j = 0; j < Stl; ++j)
    {
        cout<<U[i][j]<<' ';
    }
    cout<<endl;
}
}
 
int main()
{
    int N, M;
  
    cout << "Vvedite razmeri massiva: N i M:\n";
    cout << "N = ";
    cin >> N;
    cout << "\nM = ";
    cin >> M;
    cout << "\n";
    //не Глобальные переменные
float **Q;
 
    CreateArray(Q, N, M);
    InitArray(Q, N, M);
     printFloatArray(Q, N, M);
 
    
    DeleteArray((float**)Q, N, M);
 
    system("pause");
    return 0;
}
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,257
14.03.2019, 19:40  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
**&U
- Ооооо, спасибо, сейчас заработало. А как это правильно называется? Ссылка на указатель второго уровня?

Добавлено через 1 минуту
Цитата Сообщение от zayats80888 Посмотреть сообщение
может & не туда прилепили?
- да, не туда, сначала написал, вот так:
C++
1
float &**U,
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
14.03.2019, 19:45
Цитата Сообщение от FFPowerMan Посмотреть сообщение
А как это правильно называется? Ссылка на указатель второго уровня?
Ссылка на указатель на указатель.
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,257
15.03.2019, 06:44  [ТС]
Так а почему здесь нельзя решить просто с указателями? Т.е. почему вот этот код не работает?
C++
1
void CreateArray(float **U, int Str, int Stl)
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
15.03.2019, 07:07
Уже ж написали. Потому что указатель на указатель передается по значению т.е создается копия указателя и в функции меняется эта копия, а оригинальный указатель остается неизменным. Потому нужно передавать по ссылке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2019, 07:07
Помогаю со студенческими работами здесь

Как передать в функцию двухмерный динамический массив по ссылке?
как передать в функцию двухмерный динамический массив по ссылке?

Как передать в функцию указатель на двумерный массив?
Есть массив int arr, как передать в функцию указатель на него, чтобы при изменения массива в функции он изменялся везде?

Как правильно передать в функцию указатель на двумерный массив?
Сабж #include &lt;windows.h&gt; #include &lt;stdio.h&gt; using namespace std; //ОТ безысходности сделал матрицу глобальной int A = {2,...

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

Передать двухмерный массив в функцию
Допустим, у меня есть двухмерный массив символов char level = { &quot; &quot;, &quot; &quot;, &quot; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru