|
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
|
|
Передача по ссылке двумерного динамического массива в функцию24.12.2015, 05:01. Показов 25366. Ответов 114
Метки нет (Все метки)
0
|
|
| 24.12.2015, 05:01 | |
|
Ответы с готовыми решениями:
114
Передача двумерного массива в функцию по ссылке Передача динамического двумерного массива в функцию Передача двумерного динамического массива в функцию |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 26.12.2015, 13:36 | |
|
У тебя тогда все адреса того, что там уже есть, сместятся. В стеке что-то выделяется только при вызове функции.
Эта нестандартная возможность некоторых компиляторов - просто завуалированный new.
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
|
||
| 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 | |
|
Передача двумерного динамического массива в функцию построчно и сортировка Передача динамического двумерного массива в процедуру Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|