|
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
|
|
Передача по ссылке двумерного динамического массива в функцию24.12.2015, 05:01. Показов 24197. Ответов 114
Метки нет (Все метки)
0
|
|
| 24.12.2015, 05:01 | |
|
Ответы с готовыми решениями:
114
Передача двумерного массива в функцию по ссылке Передача динамического двумерного массива в функцию Передача двумерного динамического массива в функцию |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 26.12.2015, 13:36 | |
|
У тебя тогда все адреса того, что там уже есть, сместятся. В стеке что-то выделяется только при вызове функции.
Эта нестандартная возможность некоторых компиляторов - просто завуалированный new.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 26.12.2015, 14:21 | ||
|
0
|
||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||||||||||||||||||||||||||
| 26.12.2015, 14:38 | |||||||||||||||||||||||||||
![]() Возьмем LLVM и откроем занятный файлик, например, x86 архитектуры (как самой знакомой тебе) - lib/Target/X86/X86FrameLowering.cpp. Там среди прочего лежит реализация функционала генерации пролога и эпилога вызываемой функции (надеюсь не надо объяснять, что это). И что же мы видим:
Находим в генерации пролога это:
Можно еще взглянуть, как подчищаются псевдоинструкции:
![]()
1
|
|||||||||||||||||||||||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 26.12.2015, 17:38 | |
|
ct0r, достаточно было сказать, что выделяется выше. Только эта "alloca" - другое. Ты же не не объявляешь массив обычным способом.
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||||||
| 26.12.2015, 17:54 | |||||||
|
Можно добавить, что то же расширение компилятора variable size array реализуется через alloca:
1
|
|||||||
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
|
| 26.12.2015, 18:24 | |
|
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 26.12.2015, 21:35 | ||||||||
|
ну да ладно. теперь давайте рассмотрим тезис: что означает слово "именованная" в этом высказывании? ну то есть понятно: что есть некая область памяти. и у этой области есть имя. но что это за имя? откуда оно берется? и какое оно имеет отношение к нам, программистам? в приведенном ниже коде покажите мне имя объекта. покажите мне имя области памяти. и объясните, как оно возникло, и почему это имя именно такое, какое оно есть:
0
|
||||||||
|
Модератор
|
|
| 26.12.2015, 21:48 | |
|
hoggy, я понимаю так:
Есть уровень абстракции, на котором уместно говорить о явлении "память, поделённая на ячейки определённого размера". Есть уровень абстракции, на котором определённые участки памяти уместно трактовать как "объекты определённого типа". Объекты, насколько я знаю, бывают именованные и неименованные. Что имели ввиду Керниган и Ричи - одни Боги знают. Но то, что выражение "именованная область памяти" не nord_v выдумал - это точно. Именно это я и хотел показать, когда привёл цитату.
1
|
|
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
|
| 26.12.2015, 22:41 | |
|
hoggy, как новое определение замечания (95 пост)?
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 26.12.2015, 23:00 | |
Сообщение было отмечено gru74ik как решение
Решение
Контекст же.
Память - это физическое устройство, способное хранить разные состояния. У таких устройств могут быть внутренние адреса. Выборка одного или более чем одного адреса, для хранения какой-то одной сущности на время работы или вне времени работы программы порождает сущность, именуемую многими как объект. Так уж повелось издавна. Все просто, берем мое это сообщение, выдираем из него рэндомный набор символов, получаем какую-то определенную сущность. До тех пор пока эта сущность (выбранная часть) живет (в голове, на бумаге, в ПК, где угодно), она есть объект. Нет у него имени, нет у него ничего, кроме позиции относительно своего начала и внутреннего содержимого. Эта сущность (выбранная часть текста) даже не знает в каком из миров она появилась.(голова, мозги, ПК, бумага). Это - простейшая модель памяти и объекта (где весь текст - память, выбранная его часть - объект). Ничегошеньки лишнего нет. В том числе эта сущность не знает, что внутри нее какие-то там внутренности. Эта сущность просто есть. Она даже о возможностях своих не знает. Она не знает ни кому она нужна, ни зачем ее используют. Вообще ничего не знает. В то же время, в другом мире, в котором она появилась у нее есть владелец, который ей вертит как хочет, исключительно в своих личных целях. В этом, в другом мире у нее есть имя. В этом другом мире, одно только какое-то слово-идентификатор обозначает всю эту память (весь текст) или ее внутренности (выбранную часть текста). В этом, в другом мире существует понятие именованной области памяти. Про именованную область памяти уместно говорить когда программист идентифицирует выбранный участок памяти каким-то именем. Именованная программистом переменная - это объект, который есть какая-то часть памяти. Это, именно, именованная программистом переменная есть именованный программистом участок памяти для удобной его обработки. Кто бы там что не писал, надо в том числе своей головой думать, а не следовать подобно больным фанатикам всему что видим. В то же время в третьем мире задавались вопросом: "Передача по ссылке двумерного динамического массива в функцию - C++", но почему-то в ответах темы звучали такие фразы, которые больно похожи на: "Ничто тебе уже не поможет" , а отвечики любезно забыли про ТС (очень печальная тенденция ветки С++) а сама тема переросла в холивар, в котором уже обсудили даже вовсе и не одну тему не по теме, но до сих пор эта часть не находится где-нибудь в священных войнах.
0
|
|
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
|
| 26.12.2015, 23:07 | |
|
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 26.12.2015, 23:16 | |
|
nord_v, я не буду холиварить.
Ему дали несколько ответов и тут же начали спорить. Каждый доказывая свою правоту. Басню Крылова напоминает. Пост №3 правильный ответ на тот вопрос, который написан в заголовке темы. Даже если ТС имел ввиду что-то другое, как в заголовке темы писан вопрос - так там ему и отвечено. А указатель в С++ никогда не был массивом. Холиварить далее я не стану.
0
|
|
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
||
| 26.12.2015, 23:26 | ||
|
0
|
||
|
Комп_Оратор)
|
||||||||||||
| 26.12.2015, 23:27 | ||||||||||||
Сообщение было отмечено gru74ik как решение
Решение![]() тема Передача по ссылке двумерного динамического массива в функцию Кажется некорректной, однако, вспомним и то, что мы в разделе новичков и тут можно встретить задания вроде: "удалить из массива нечётные элементы". ![]() Массив как способ хранения, массив как способ доступа и массив как переменная (сущность на которою можно ссылаться по ссылке), это разные вещи. В языке программистов они существуют параллельно и имеет смысл соблюдать осторожность, стараясь понять о каком значении говорит собеседник. При первой встрече с массивами мы встречаем определение, данное с точки зрения хранения. Далее первые шаги практики показывают, что и доступ к ним особенный, то есть можно обращаться по индексу. Далее оказывается, что оператор "квадратные скобки" можно перегрузить самостоятельно и становится ясно, что доступ не всегда определяет массив, если этот доступ определён как пользовательский. К этим трудностям ещё добавляется массив как переменная. Оказывается, что массив созданный на стеке таким образом:
Однако, везде и всюду существует практика называть области памяти выделенные в куче оператором new[] массивами. С точки зрения хранения тут нет проблем, они подпадают под определение. С точки зрения доступа тоже. Указатель, это встроенный тип с перегруженными скобками и это же не случайно. Указывая на начало области он не знает о её размере и предполагает доступ к первому объекту, но никто не мешает трактовать эту область как массив, обращаясь к отдельным элементам по индексу. Однако такой указатель остаётся указателем и не более. Массивом он является только в голове программиста и передача такого указателя, поддерживающая семантику массива, должна обеспечить видимость размера в область передачи дополнительными средствами. То есть ответ на вопрос в теме: Нельзя осуществить "Передачу по ссылке двумерного динамического массива в функцию", если под ссылкой понимать ссылку объявляемую как ссылку на массив:
"Передачу по ссылке на массив двумерного динамического массива в функцию" Остаётся предположить, что под ссылкой имеется ввиду обобщённое название адресного выражения, под которое попадает и обычный указатель. То есть решением является передача указателя (на указатель) и двух размеров. Что и было сказано в самом начале. Прошу прощения за вторжение, с вещами, которые тут все понимают. Кроме новичков. Я с удовольствием прочел тему и часть о выделении памяти на стеке заинтересовала, как принципиальная возможность. Спасибо ct0r, надеюсь, я когда нибудь почитаю об этом побольше.
2
|
||||||||||||
|
Модератор
|
|
| 27.12.2015, 00:08 | |
|
ТС получил свои ответы. И даже более того. Будем закругляться, господа.
1
|
|
| 27.12.2015, 00:08 | |
|
Помогаю со студенческими работами здесь
115
Передача двумерного динамического массива в функцию построчно и сортировка Передача динамического двумерного массива в процедуру Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
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.
На борту пять. . .
|