|
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
|
|||||||||||
Функции, передача массива в качестве параметра30.09.2009, 16:59. Показов 18239. Ответов 14
Метки нет (Все метки)
Приветствую)
Собственно, есть простенькое задание с двумерными массивами, оно выполнено:
(cannot convert parameter 1 from 'int [4][5]' to 'const int *') Помогите доделать, или подскажите, в каком направлении искать =)
0
|
|||||||||||
| 30.09.2009, 16:59 | |
|
Ответы с готовыми решениями:
14
Передача временного массива в качестве параметра функции Передача двумерного массива указателей на char в качестве параметра функции Передача функции в качестве параметра |
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 30.09.2009, 17:01 | |
Сообщение было отмечено как решение
Решение
это
int srch(const int* mas, const int a, const int b); заменить на int srch(const int (&mas)[str][stb], const int a, const int b);
3
|
|
|
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
|
|
| 30.09.2009, 17:27 [ТС] | |
|
Спасибо, сейчас попробую =0
0
|
|
|
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
|
||||||
| 30.09.2009, 20:31 [ТС] | ||||||
|
Работает) еще раз благодарю
вот окончательная версия, работает (двумерные массивы, функции, передача массива в качестве параметра, поиск строк с наибольшим количеством нулей). Может, понадобится кому)
0
|
||||||
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 30.09.2009, 21:13 | |
|
кстати, в таком случае дополнительные переменные a и b не нужны (если они используются для передачи количества строк/столбцов, чего из кода не видно)
получить их можно так: const size_t H = sizeof(mas) / sizeof(mas[0]); const size_t W = sizeof(mas[0]) / sizeof(mas[0][0]);
2
|
|
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
| 01.10.2009, 03:01 | |
|
Rififi, а почему не работало? Ведь если у функции есть параметр-указатель,то можно передавать и массивы? Или ошибка потому,что параметр передаётся как const,и это связано с неявными преобразованиями указателя в массив?
0
|
|
|
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
|
|||||||
| 01.10.2009, 06:17 | |||||||
0
|
|||||||
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 01.10.2009, 13:30 | |
|
#pragma,
Rififi, а почему не работало? В этом случае не работало потому, что функция ожидала указатель, а передавался двумерный массив. Одно в другое не приводится. Ведь если у функции есть параметр-указатель,то можно передавать и массивы? Верно, но с некоторыми ограничениями. Самое главное из которых - когда компилятор неявно преобразует имя массива в указатель на первый элемент, то теряется информация о типе объекта. (был массив, имеющий вполне определённый размер, стал некий указатель) Ну и еще то, что нельзя таким образом передать имя двумерного массива в функцию, ожидающую int** - т.к. расположение данных в памяти отличается (это проявится только на стадии выполнения программы). Или ошибка потому,что параметр передаётся как const,и это связано с неявными преобразованиями указателя в массив? нет, const влияет только на то, что данные, которые адресует такой указатель нельзя изменить, причем об этом следит сам компилятор а не программист.
1
|
|
|
|
||||||||||||
| 01.10.2009, 14:29 | ||||||||||||
|
Однако я понимаю, чем вызван вопрос #pragm'ы, а потому просто отвечу конкретным исходником
В языке C99 (и в GNU C) есть понятие VLA - variable length array. Возможно, что на современных виндовых компиляторах это тоже поддерживается, а потому можнонаписатьболее элегантно. При этом надо понимать, что это не есть "станадртный Си" (условнообзову именно этим термином)
3
|
||||||||||||
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
|
| 01.10.2009, 15:02 | |
|
Evg,
Возможно, что на современных виндовых компиляторах это тоже поддерживается Что касается MS, то они по каким-то неведомым причинам не слишком жалуют С99 и не торопятся добавлять его поддержку в свой компиль. Так, даже новейшая скоро-выходящая VS2010 не обладает такой поддержкой. впрочем, имея C++ оно не особо-то и нужно. C++-эквивалент этого будет: template <typename T, const size_t n1, const size_t n2> void func(T (&arr)[n1][n2]); только, как видно, гораздо удобнее - не зависит от типа, и размерности массива считаюся автоматически компилятором
1
|
|
|
MCSD: APP BUILDER
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
|
||||||
| 01.10.2009, 19:05 | ||||||
|
Evg,
Где-то мы это уже обсуждали, но всё равно напиши сюда конкретный пример, чтобы люди не искали Собстна, твой пример может быть переписан так:
0
|
||||||
|
0 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 29
|
|
| 20.11.2009, 13:29 | |
|
ага
0
|
|
|
21 / 21 / 2
Регистрация: 09.11.2010
Сообщений: 102
|
|
| 05.02.2011, 01:49 | |
|
а как передать строку массива в качестве параметра?
0
|
|
| 05.02.2011, 01:49 | |
|
Помогаю со студенческими работами здесь
15
Передача функции в качестве параметра Передача лямбда-функции в качестве параметра Передача CString в качестве параметра функции Передача функции в качестве параметра в другую функцию
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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(), которая. . .
|