Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/120: Рейтинг темы: голосов - 120, средняя оценка - 4.53
 Аватар для Vahram1995
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80

Передача по ссылке двумерного динамического массива в функцию

24.12.2015, 05:01. Показов 25052. Ответов 114
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приведите, пожалуйста, пример. Нигде не могу найти.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2015, 05:01
Ответы с готовыми решениями:

Передача двумерного массива в функцию по ссылке
Требуется написать функцию, которая выделяет память для одномерного и двумерного динамического массива. Для первого варианта вопросов вроде...

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

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

114
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 17:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
Я имел ввиду:
C++
1
2
3
4
5
6
7
8
9
template<typename T, size_t N, size_t M>
void foo(const T (&arr)[N][M])
{
     //...
}
int main()
{
      int (*p1)[5][3] = (int(*)[5][3])new int[5][3] ;
      foo(*p1) ;
Не то. Указатель статически связан, поэтому и работает для константно заданых размеров.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.12.2015, 17:06
Цитата Сообщение от nord_v Посмотреть сообщение
Указатель статически связан

Цитата Сообщение от Croessmah Посмотреть сообщение
од словом динамический я имею ввиду массив с dynamic storage duration
Цитата Сообщение от nord_v Посмотреть сообщение
Не то.
Как раз то - массив с динамическим временем хранения.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 17:08
Цитата Сообщение от Croessmah Посмотреть сообщение
Как раз то - массив с динамическим временем хранения.
Ты его динамически и не задашь:
C++
1
2
3
    int n = 5, m = 3;
    int (*p1)[5][3] = (int(*)[5][3])new int[n][m] ;
    foo(*p1) ;
Компилируется?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.12.2015, 17:10
Цитата Сообщение от nord_v Посмотреть сообщение
Ты его динамически и не задашь
сначала почитай что такое dynamic storage duration потом отпишись.
Тоже мне, динамическое задание...
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 17:12
А так, правильно размер выведет:
C++
1
2
3
const int n = 4, m = 6;
    int (*p1)[5][3] = (int(*)[5][3])new int[n][m] ;
    foo(*p1) ;
Добавлено через 1 минуту

Не по теме:

Croessmah, ты чушь предложил, а теперь упираешься, хотя и сам уже понял, что чушь.



 Комментарий модератора 
nord_v, почитайте пожалуйста правила форума:

П. 3.1 Уважительно относитесь к другим участникам форума.
0
24.12.2015, 17:13

Не по теме:

nord_v, ты один еще не понял о чем я!

0
24.12.2015, 17:20

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
ты один еще не понял о чем я!
А кто ещё понял, кроме тебя и (возможно) hoggy? Пускай я тупой, но я понял это: не годится твой шаблон для динамически создаваемых массивов.

0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.12.2015, 17:35
Цитата Сообщение от nord_v Посмотреть сообщение
для динамически создаваемых массивов.
Еще раз пост #5
Цитата Сообщение от Croessmah Посмотреть сообщение
динамически создаваемый значит созданный в динамике.
а не расширяемый.

C++
1
int * p = new int[x]//сие тоже не расширяется, если не велосипедить
Такой вещи, как расширяемый массив в языке вообще нет.
Но есть готовые реализации такого функционала в стандартной библиотеке.

Добавлено через 5 минут
Цитата Сообщение от nord_v Посмотреть сообщение
А кто ещё понял, кроме тебя и (возможно) hoggy?
он то понял, его цитату и приведу
Цитата Сообщение от hoggy Посмотреть сообщение
если для одномерного есть синтаксический сахар,
который и создает иллюзию динамического в неокрепших умах,
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 17:43
Цитата Сообщение от Croessmah Посмотреть сообщение
Еще раз пост #5
Сообщение от Croessmah
динамически создаваемый значит созданный в динамике.
Динамика подразумевает и размер, неизвестный на этапе компиляции. Как с этим быть? На один вопрос ответь: твой шаблон будет правильно работать с динамически создаваемыми массивами (размер неизвестен на этапе компиляции, память в куче)? Или ты уже про другое пишешь?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.12.2015, 17:50
Цитата Сообщение от nord_v Посмотреть сообщение
размер неизвестен на этапе компиляции
Размер массива ВСЕГДА известен на этапе компиляции, иначе это уже не массив!

Добавлено через 2 минуты
8.3.4 Arrays
1.
...
If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero. The constant expression specifies the bound of (number of elements in) the array.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 17:57
Цитата Сообщение от Croessmah Посмотреть сообщение
Размер массива ВСЕГДА известен на этапе компиляции, иначе это уже не массив!
Т.е., вот это не массив?
C++
1
2
3
    int n;
    std::cin >> n;
    int* p1 = new int[n];
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.12.2015, 17:59
Ну и для new
When the allocated object is an array (that is, the noptr-new-declarator syntax is used or the new-type-id or
type-id denotes an array type), the new-expression yields a pointer to the initial element (if any) of the array. [ Note: both new int and new int[10] have type int* and the type of new int[i][10] is int (*)[10] — end note ] The attribute-specifier-seq in a noptr-new-declarator appertains to the associated array type.
То бишь оно уже возвращает указатель на первый элемент, а не массив.

Добавлено через 1 минуту
Цитата Сообщение от nord_v Посмотреть сообщение
Т.е., вот это не массив?
Это куча int'ов. Они расположены друг за другом, поэтому с точки зрения функционала - массив, с точки зрения типа - нет.
Банально sizeof для массива выдает именно размер массива
1
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 18:08
Цитата Сообщение от Croessmah Посмотреть сообщение
Это куча int'ов. Они расположены друг за другом, поэтому с точки зрения функционала - массив, с точки зрения типа - нет.
Для массивов, которым размер задаётся данным образом, твой шаблон будет работать?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.12.2015, 18:18
Цитата Сообщение от nord_v Посмотреть сообщение
Для массивов, которым размер задаётся данным образом, твой шаблон будет работать?
конечно нет. Оно же не массив уже.
1
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 18:31
Цитата Сообщение от Croessmah Посмотреть сообщение
конечно нет
Спасибо, Croessmah, как я хотел это услышать...
Цитата Сообщение от Croessmah Посмотреть сообщение
Оно же не массив уже.
Свести бы тебя с профессионалами, с Прата, например.
Миниатюры
Передача по ссылке двумерного динамического массива в функцию  
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.12.2015, 19:03
nord_v, ну вон же тебе пишут, что массив, выделенный на этапе выполнения называется динамическим.
Цитата Сообщение от Croessmah Посмотреть сообщение
динамически создаваемый значит созданный в динамике.
Цитата Сообщение от Croessmah Посмотреть сообщение
а не расширяемый.
Ты ж вот сам привел цитату, где написано тоже самое, только другими словами.
Считаю вопрос закрытым.

P.S. Авторы таких учебников также упрощают изложение, дабы не грузить.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 19:29
Цитата Сообщение от Croessmah Посмотреть сообщение
массив, выделенный на этапе выполнения называется динамическим.
А это не на этапе выполнения?
C++
1
2
3
int n;
    std::cin >> n;
    int* p1 = new int[n];
И там такие массивы называют массивами, в отличие от тебя:
Цитата Сообщение от Croessmah Посмотреть сообщение
Оно же не массив уже.
Добавлено через 53 секунды
Цитата Сообщение от Croessmah Посмотреть сообщение
а не расширяемый.
...
Цитата Сообщение от Croessmah Посмотреть сообщение
Такой вещи, как расширяемый массив в языке вообще нет.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.12.2015, 19:30
Цитата Сообщение от nord_v Посмотреть сообщение
Т.е., вот это не массив?
C++
1
2
3
    int n;
    std::cin >> n;
    int* p1 = new int[n];
Бинго!!!
ещё чуть чуть, и вы осознаете,
что на плюсах не существует никаких динамических массивов
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 19:36
Цитата Сообщение от hoggy Посмотреть сообщение
что на плюсах не существует никаких динамических массивов
Мне тебя слушать, или Прата?

Добавлено через 3 минуты
Тебя тоже нужно с ним свести. Но я знаю, ты не дрогнешь...
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
24.12.2015, 19:38
Цитата Сообщение от hoggy Посмотреть сообщение
что на плюсах не существует никаких динамических массивов
Это чуть-чуть уже на страницу. Бестолку как углубится в язык, так сам дойдет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2015, 19:38

Передача двумерного динамического массива чисел в функцию
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() , мы пишем так , как указано...

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Закрытая тема Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru