|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|||||||||||||||||||||||||||||||
Передача двумерных массивов и указателей в функцию15.08.2015, 10:26. Показов 9733. Ответов 11
Метки нет (Все метки)
Не по теме: Warning: если про это уже было, можете удалить это сообщение Передача двумерного массива функции Уже в который раз натыкаюсь на тему об ошибке передачи двумерного массива в функцию (либо при преобразовании типов, либо при индексации элементов). Так вот, сейчас я, фактически, перепишу страницу из "Языка программирования С++" от Сами-Знаете-Кого, так что если вы действительно хотите разобраться с фокусами С++, достаньте и прочтите эту книгу. Когда вы пишите так:
Такое объявление тоже не сработает:
В общем, решением является следующее:
1. В ранних компиляторах и в языке Си передавать массивы через двойной указатель можно, но ошибку времени исполнения схватить можно запросто (из-за access violation, скорее всего). 2. А вообще вы пользуетесь языком С++, в котором есть прекрасный класс vector<>, так что если вы пишите обычную программу (у которой нет серьезных ограничений по памяти/времени), пользуйтесь им. 3. Массивы строк (char* strs[]) передавать через двойной указатель можно, поскольку там в качестве последнего элемента выступает '\0', а все функции обработки строк стандартной библиотеки обрабатывают строки до этого символа.
0
|
|||||||||||||||||||||||||||||||
| 15.08.2015, 10:26 | |
|
Ответы с готовыми решениями:
11
Передача двумерных массивов в функцию Передача двумерных массивов в функцию |
|
Неэпический
|
||||||
| 15.08.2015, 10:42 | ||||||
|
tnk500,
1
|
||||||
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
| 15.08.2015, 10:55 [ТС] | |
|
Не по теме: Croessmah, согласен, шаблоны тоже решение. Но я писал для самых-самых зеленых, которые с шаблонами, может, и незнакомы. К тому же сомневаюсь, что человек, знающий о шаблонах, не будет знать правил передачи двумерных массивов. И разумеется, я забыл о динамических массивах. В них передача через двойной (в зависимости от размерности) указатель является по умолчанию.
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 15.08.2015, 10:59 | ||
|
0
|
||
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
| 15.08.2015, 11:13 [ТС] | |
|
Не по теме: Mr.X, см. в конец того сообщения. И все же они где-то да нужны. Croessmah, конечно, иначе и ошибок, мною описанных, не было бы. И операция new возвращает указатель на выделенный элемент(-ы) в куче. Честно говоря, был бы благодарен, если бы вы пояснили смысл вашего высказывания
0
|
|
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
| 15.08.2015, 11:52 [ТС] | |
|
Croessmah, простите, но я где-то говорил, что массивы и указатели — одно и то же?) Я писал, что при передаче через обычный (общий) двойной указатель (int**) двойного массива выйдет ошибка компиляции, что чуть намекает на мою позицию. Ваш же пример специфицирует тип указателя до указателя на массив с тремя элементами, что вполне законно для целей указания на массив фиксированной длины. Этот же указатель можно передать функции, ожидающей указатель на массив такой длины.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 15.08.2015, 16:51 | |||||||
|
речь о том, что когда заходит речь о передаче массивов, то всегда заходит речь об указателях. в итоге в неокрепших деццких мозгах формируется каша. например такая:
но продолжают наивно верить в "динамические массивы", подразумевая при этом указатель.
0
|
|||||||
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
| 15.08.2015, 17:08 [ТС] | |
|
hoggy, но ведь не будете же вы называть динамический массив указателем на область памяти, выделенную во время исполнения? Да и называют скорее всего по привычке, в других распространенных ЯП динамический массив массивом и называется, вот и здесь указатель на дин. память дин. массивом и называют. А на что шарперам/явистам тонкости в типизации статических (обычных, не обязательно со словом static) и "динамических" массивов? Исправят параметризацию однажды, и забудут об этом.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 15.08.2015, 17:53 | |
|
0
|
|
| 15.08.2015, 17:53 | |
|
Помогаю со студенческими работами здесь
12
Составить программу на языке C++ для обработки двумерных массивов с использованием указателей Передача двумерных массивов через указатель Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? Передача массивов указателей в качестве параметров функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|