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

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

24.12.2015, 05:01. Показов 25026. Ответов 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
Закрытая тема Создать тему
Новые блоги и статьи
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru