|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
Массивы и функции как параметры18.06.2013, 18:14. Показов 3161. Ответов 23
Метки нет (Все метки)
Из главной функции нужно вызвать промежуточную функцию с 3 параметрами - (введённый двумерный массив, кол-во элементов, функция).
Последний параметр действие(функция) которое нужно выполнить над массивом. Например заменить нулем все элементы столбца после минимального элемента. Сложность у меня вызвало то что промежуточная функция должна выполнить это действие для конкретных элементов. Например у меня выполнить действие для столбцов у которых последний элемент имеет чётное значение. Как в промежуточной функции я должен уметь различить это, если я получаю целиков массив в параметрах? При выполнении действия как то передавать ему нужный столбец как отдельную структуру? Если писанина вся эта не ясна вот схема вызовов функций: main -> промежуточная функция (3 параметра), определяются нужные столбцы -> функция(действие над выбранными столбцами)
0
|
|
| 18.06.2013, 18:14 | |
|
Ответы с готовыми решениями:
23
Массивы, как параметры функций
|
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
| 20.06.2013, 12:10 [ТС] | |
|
Люди, ну объясните пожалуйста как это сделать?
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||
| 25.06.2013, 10:20 | |||||||
1
|
|||||||
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
||||||
| 02.07.2013, 00:19 [ТС] | ||||||
|
Огромное спасибо!
Что бы точно отразить суть задания напишу такой полукод:
И вопрос, что за трюк с этим typedef (*action)? Немного не понял. Спасибо.
0
|
||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||
| 02.07.2013, 12:29 | ||||||||
(int **, int, int) и возвращает void.
1
|
||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 02.07.2013, 14:21 | |
|
SanAlex, а чего подгонять? Мой код и так на 80% соответствует заданию. Вам осталось написать второе действие, а также функцию main, в которой вызывать process_array с соответствующими аргументами.
1
|
|
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
| 15.07.2013, 19:15 [ТС] | |
|
Ещё такой вопрос: вот вы двумерный массив в списке формальных параметров функции пишете так (**arr)
А разве если просто написать (arr) - это не будет ссылкой на его первый элемент? Если все же оставить так (**arr), то при вызове какая будет запись массива в фактических параметрах. Я просто думал когда дело ведётся с массивом, то при описании и вызове его в параметрах, он записывается одинаково -(arr).
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||||||
| 15.07.2013, 20:00 | |||||||||||
|
SanAlex, вопроса не понял. Если записать так:
Учтите, что обычный статический двумерный массив, объявленный как type array[ROWS][COLS], в функцию, ожидающую type **, передать не получится, поскольку типы будут несовместимы (тип массива array - не type **, а type (*)[COLS]). Поэтому передавать туда надо массив указателей, например, динамически выделенный массив массивов:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
||||||||||||||||
| 15.07.2013, 20:34 [ТС] | ||||||||||||||||
|
silent_1991
Да я видимо не понятно описал вопрос. Ну вообщем. каков будет синтаксис, если: 1) Массив в списке формальных параметров 2) Тот же массив в списке фактических (при вызове) Далее, допустим такое описание функции
Это называется передача "Массива указателей?" Такой же синтаксис пойдёт и для n-мерного массива? И что написано в этой строке?
Спасибо.
0
|
||||||||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||
| 15.07.2013, 20:43 | ||||
|
1
|
||||
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
| 16.07.2013, 22:02 [ТС] | |
|
Спасибо. Однако я ничего не понял. Объясните пожалуйста доступным, для новичка, языком что к чему.
Перерыл весь интернет. Передача двумерных массивом как параметра везде описана по разному. Кто то в параметрах функции пишет этот массив так: (int **arr) Кто то так: (int arr[][N]) или даже так (int *arr), тогда какой смысл в первом случае? Кто нибудь может доступно объяснить при каком описании, какой будет вызов (синтаксически). И какой вариант лучше и почему, или может каждый вариант хорош для конкретного случая? И в конце концов что из этого всего называется Массивом указателей, что из них массив массивов? Надеюсь на вашу снисходительность по отношению к моим "непоняткам". Просто такое расхождение в информации разных источником совсем с толку сбило, и запутало. Спасибо.
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||||||||||||||||||||||
| 16.07.2013, 22:29 | |||||||||||||||||||||||||||||||
|
Двумерный массив может быть представлен по-разному:
1. Созданный на стеке:
Выделяем одномерный массив 10*20, а потом интерпретируем его как двумерный в своих вычислениях. В первом случае передавать массив в функцию надо так:
1
|
|||||||||||||||||||||||||||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 16.07.2013, 22:29 | |
|
Для начала надо понимать, что двумерный массив в памяти не отличается от одномерного - всё его содержимое аккуратно и последовательно разложено в одной непрерывной области памяти. Строки такого массива последовательно размещены друг за другом.
Первый случай (int ** arr) - массив указателей на строки двумерного. Такой вспомогательный массив необходимо создавать и заполнять указателями. Второй случай (int arr[][N]) - по сути, адрес первого элемента, а синтаксически - тот же двумерный массив. Однако при этом функция жёстко заточена под конкретный N. Третий случай (int *arr) - тоже адрес первого элемента. Функции передаются размеры массива и она вычисляет линейный индекс из номеров строки и столбца (если массив размерностью M на N, то j-й элемент i-й строки имеет линейный индекс i*M + j).
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||
| 16.07.2013, 22:36 | |||
|
0
|
|||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|||
| 16.07.2013, 22:51 | |||
|
Ну и по поводу имитации - это вопрос мнений. Собственно, в случае работы со стековыми двумерными массивами компилятор усердно занимается как раз той самой имитацией.
0
|
|||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 16.07.2013, 23:06 | ||
|
0
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||
| 16.07.2013, 23:16 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
||
| 28.09.2013, 16:23 [ТС] | ||
|
Tulosba
вы писали:
0
|
||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 28.09.2013, 17:36 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 28
|
|
| 28.09.2013, 17:47 [ТС] | |
|
Tulosba,
Блин, а как теперь к массиву обращаться внутри функции? Определённому элементу?
0
|
|
| 28.09.2013, 17:47 | |
|
Помогаю со студенческими работами здесь
20
Как правильно вызывать функцию, параметры которой - массивы Двумерные массивы как формальные и фактические параметры функций Целесообразно ли передавать большие массивы как параметры в метод? Оптимизация кода, функции и методы как параметры функции Параметры-значения и параметры-переменные в функции и процедуре Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|